Я занимаюсь программированием карточной игры. Для этой карточной игры я хочу перетасовать колоду. Колода вектор уникальных указателей и выглядит примерно так:Как я могу перетасовать вектор с уникальными указателями в случайной последовательности с помощью std :: shuffle?
std::vector<std::unique_ptr<Cards>> _deck;
Я пытался получить случайную последовательность с функцией воспроизведения в случайном порядке из но я получаю следующее сообщение об ошибке: «Нет экземпляр шаблона функции» СТД :: перетасовать «совпадает с вектором аргументов». ". Посмотреть блок кода ниже аргументов.
std::shuffle(_buildings_deck.begin(), _buildings_deck.back(), std::default_random_engine{});
насколько я могу видеть аргументы, которые я использую правильно, мне еще нужно, чтобы выбрать случайный двигатель, но это не должно быть проблемой. Поэтому мне стало интересно, можно ли в случайном порядке использовать вектор уникальных указателей, и если да, то как?
Перетасовать вектор (или список) reference_wrapper (http://en.cppreference.com/w/cpp/utility/functional/reference_wrapper). –
Есть ли причина, по которой «Карточка» - это нечто иное, чем целое? Почему вы используете здесь кучу? –
@JesperJuhl Я попробовал эту кусок кода: «std :: vector> ref (_buildings_deck.begin(), _buildings_deck.end()) \t std :: shuffle (ref.begin(), ref.end(), std :: mt19937 {std :: random_device {}()}); ". Но теперь я получил ошибку, которую я пытаюсь ссылаться на удаленную функцию. Я знаю, что это распространенная ошибка при попытке скопировать переменную, пока нет хорошего конструктора копирования. И поскольку я использую уникальный указатель, невозможно скопировать переменную. Так может это проблема? Или я написал плохую часть кода? –
user3473161