4

头文件<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

4

1 回答 1

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 调用的函数的参数类型。

于 2012-08-23T18:02:18.147 回答