头文件<random>
允许初始化种子序列的内部序列。 seed_seq
类的对象可以通过多种方式构建。我对其中一种方法很好奇,特别是使用了什么 C++ 技术。
我在这里查看网站:http://www.cplusplus.com/reference/std/random/seed_seq/seed_seq/
在示例部分,我看到了这一行:
std::seed_seq seed2 = {102,406,7892};
这里究竟发生了什么?似乎正在将一个类对象分配给一个数组。我查看了初始化列表构造、复制赋值构造函数,但我仍然对到底发生了什么感到困惑。
我明白了std::seed_seq seed3 (foo.begin(),foo.end());
和 std::seed_seq seed1;
.第一个代码片段 ( seed3
) 调用 seed_seq
带参数的构造函数 foo.begin()
和 foo.end()
, 第二个代码片段 ( seed1
) 是使用默认构造函数构造的。
最佳答案
我不确定我是否完全理解您的问题,因为您几乎已经自己给出了答案。使用类似 {102,406,7892}
的东西是一个初始化列表。具有类似 MyClass::MyClass(std::initializer_list<int> args)
签名的构造函数方法(或实际上任何方法)可以拿这个。
您可以使用普通的迭代器方法对其进行迭代 begin()
和 end()
.它基本上只是一种方便的方式来在代码中传递任意长度的列表,而不必实例化“正常”std::list
。或 std::vector
(并继续调用 push_back()
)或一个数组。
作为奖励,您还可以使用初始化列表构建标准容器:std::vector<std::string> vec {"hello", "world"}
.这允许您使用标准容器作为仍然可以使用 initializer_list 调用的函数的参数类型。
关于C++11 seed_seq 初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12097383/