C++ Shuffle Vector

Rya*_*les 2 c++ c++11

我已经看到了其他线索,但似乎没有人回答我的问题.我正在尝试shuffle()在向量上使用该函数,但我一直收到错误:

deck_of_cards.cpp:34:5: error: no matching function for call to 'shuffle'
shuffle (deck.begin(), deck.end(), std::default_random_engine(seed));
^~~~~~~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/algorithm:3049:10: note: candidate function [with
  _RandomAccessIterator = std::__1::__wrap_iter<Card *>, _UniformRandomNumberGenerator = std::__1::linear_congruential_engine<unsigned int, 48271, 0,
  2147483647>] not viable: expects an l-value for 3rd argument
void shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last,
     ^
1 error generated.
Run Code Online (Sandbox Code Playgroud)

我使用clang ++作为我的编译器,这是我抛出错误的代码:

void DeckOfCards::shuffleDeck()
{
    seed = std::chrono::system_clock::now().time_since_epoch().count();
    shuffle (deck.begin(), deck.end(), std::default_random_engine(seed));
}
Run Code Online (Sandbox Code Playgroud)

我的程序中确实有所有正确的#includes.我是C++的新手,这基本上是我正在尝试转换为C++的Java程序.任何帮助,将不胜感激!

jua*_*nza 5

编译器告诉你它需要一个左值ar第三个参数,并且你给它一个rvalue(以临时对象的形式).

试试这个:

 auto gen = std::default_random_engine(seed);
 shuffle (deck.begin(), deck.end(), gen);
Run Code Online (Sandbox Code Playgroud)

请注意,std::shuffle应该接受rvalue作为第三个参数,因此符合标准的实现会接受您的代码.