如何将标准生成器传递给STL函数?

时间:2014-11-19 12:47:31

标签: c++ stl

#include <random>
#include <algorithm>
#include <vector>

int main() {
    std::vector < int > a = {1, 2, 3};
    std::mt19937 generator;
    std::random_shuffle(a.begin(), a.end(), generator);
}

我正在尝试使用g ++ -std = c ++ 0x编译此代码,接收以

结尾的巨大编译器转储
/usr/include/c++/4.9.2/bits/random.h:546:7: note:   candidate expects 0 arguments, 1 provided

任何正确的方式吗?

1 个答案:

答案 0 :(得分:7)

您尝试使用的std::random_shuffle超载需要&#34; RandomFunc&#34;:

  

函数对象在区间[0,n]中返回随机选择的可转换为std::iterator_traits<RandomIt>::difference_type的值,如果调用为r(n)

在C ++ 14中,std::random_shuffle被弃用,而不是std::shuffle,它使用生成器而不是&#34; RandomFunc&#34;。只需将功能更改为std::shuffle