C ++ 11 seed_seq初始化

时间:2012-08-23 17:51:09

标签: 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_seqfoo.begin()调用foo.end()构造函数,第二个代码段(seed1)正在使用默认构造函数。

1 个答案:

答案 0 :(得分: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调用的函数的参数类型。