C++11 seed_seq 初始化

标签 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};

这里究竟发生了什么?似乎正在将一个类对象分配给一个数组。我查看了初始化列表构造、复制赋值构造函数,但我仍然对到底发生了什么感到困惑。

我明白了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/

相关文章:

c++ - 可选地发布基于可变模板参数的方法

c++ - C/C++ 中的图像缩放和旋转

algorithm - 预期运行时间与最坏情况运行时间

c++ - 复制时跟踪所属类的 `this` 的数据成员

c++ - 如何包装 "expanded variadic template parameters"?

c++ - 如何检查可能使用 SFINAE 的类型中是否存在字段?

c++ - 返回类型为 auto 的函数

c++ - 在 X11 中监听键盘事件而不消耗它们 - 键盘 Hook

c++ - Main.cpp 和随机数生成器 C++ 函数

objective-c - 如何在 Objective-C 中生成随机小写字母?