C++ 11 seed_seq初始化

jra*_*and 4 c++ random c++11

头文件<random>允许初始化种子序列的内部序列.类的对象seed_seq可以以多种方式构造.我很好奇其中一种方式,特别是使用C++技术.

我在这里查看网站:http://www.cplusplus.com/reference/std/random/seed_seq/seed_seq/

在示例部分中,我看到了这一行:

std::seed_seq seed2 = {102,406,7892};
Run Code Online (Sandbox Code Playgroud)

到底发生了什么?似乎正在将一个类对象分配给一个数组.我已经查看了初始化列表构造,复制赋值构造函数,我仍然对确切发生的事情感到困惑.

我的理解std::seed_seq seed3 (foo.begin(),foo.end());std::seed_seq seed1;.第一代码段(seed3)被调用seed_seq以参数构造foo.begin()foo.end(),并且所述第二代码段(seed1)的使用默认构造被构造.

Mar*_*mer 5

我不确定我完全理解你的问题,因为你自己几乎已经给出了答案.使用类似的东西{102,406,7892}是初始化列表.具有签名的构造方法(或实际上任何方法)MyClass::MyClass(std::initializer_list<int> args)可以采用这种方法.

您可以使用迭代正常的迭代方法过来begin()end().它基本上只是一种方便的方式来传递代码中的任意长度列表,而不必实现"正常" std::liststd::vector(并继续调用push_back())或数组.

作为奖励,您还可以使用初始化列表构建标准容器:std::vector<std::string> vec {"hello", "world"}.这允许您使用标准容器作为仍可使用initializer_list调用的函数的参数类型.