C++ 洗牌 vector

标签 c++ c++11

我看过其他相关主题,但似乎没有一个回答我的问题。我尝试在 vector 上使用 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.

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

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

我的程序中确实有所有正确的#includes。我对 C++ 相当陌生,这基本上是我正在尝试将其转换为 C++ 的 Java 程序。任何帮助,将不胜感激!

最佳答案

编译器告诉您它需要一个左值 ar 第三个参数,而您正在为其提供一个右值(以临时对象的形式)。

试试这个:

 auto gen = std::default_random_engine(seed);
 shuffle (deck.begin(), deck.end(), gen);

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

关于C++ 洗牌 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22534474/

相关文章:

c++ - 通过 Qt C++ 中的键访问解析的嵌套 JSON

c++ - XCode 中的字符串 (C++)

c++ - 也许 monad : how to avoid storing T-typed value in Maybe<T> instance?

c++ - std::async 函数串行运行

C++0x 线程中断

c++ - 嵌套类指针访问

python - 将 unique_ptr 与 boost python 结合使用 - boost::shared_ptr 有效,但 unique_ptr 无效

c++ - 使用 std::min 或三元运算符的性能差异?

c++ - vector emplace_back 困惑

C++ 变量/循环问题