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

C++ 如何将标准生成器传递给STL函数?,c++,stl,C++,Stl,有没有正确的方法?您试图使用的重载需要一个“RandomFunc”: 函数对象,如果作为r(n)调用,则返回在间隔[0,n]内可转换为std::iterator_traits::difference_type类型的随机选择值 在C++14中,std::random_shuffle被弃用,取而代之的是std::shuffle,它使用一个生成器而不是“RandomFunc”。只需将函数更改为std::shuffleThx,效果非常好。您可以将其作为答案发布,以便我接受它吗?您可以使用包装函数或lam

有没有正确的方法?

您试图使用的重载需要一个“RandomFunc”:

函数对象,如果作为r(n)调用,则返回在间隔[0,n]内可转换为
std::iterator_traits::difference_type
类型的随机选择值


在C++14中,
std::random_shuffle
被弃用,取而代之的是
std::shuffle
,它使用一个生成器而不是“RandomFunc”。只需将函数更改为
std::shuffle

Thx,效果非常好。您可以将其作为答案发布,以便我接受它吗?您可以使用包装函数或lambda;
RandomFunc
参数期望某个本身将接受参数
n
,而C++11随机数工具都具有eir范围参数在它们的实例中烘焙。但是chris的答案当然是最好的。+1。@ShafikYaghmour,谢谢,我可能应该对此进行一点扩展。
#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);
}
/usr/include/c++/4.9.2/bits/random.h:546:7: note:   candidate expects 0 arguments, 1 provided