std::seed_seq::seed_seq
来自cppreference.com
seed_seq() noexcept; |
(1) | (C++11 起) |
seed_seq( const seed_seq& ) = delete; |
(2) | (C++11 起) |
template< class InputIt > seed_seq( InputIt begin, InputIt end ); |
(3) | (C++11 起) |
template< class T > seed_seq( std::initializer_list<T> il ); |
(4) | (C++11 起) |
1) 默认构造函数创建拥有零长度初始种子序列的
std::seed_seq
对象。2) 复制构造函数被删除:
std::seed_seq
不可复制。3) 构造
(即复制低 32 位)为初始种子序列。
std::seed_seq
,以拥有从范围 [begin, end)
上迭代并以解引用迭代器复制值获得的值 modulo 232(即复制低 32 位)为初始种子序列。
参数
begin, end | - | 初始种子序列,表示为一对 std::iterator_traits<>::value_type 为整数类型的输入迭代器 |
il | - | 整数类型对象的 std::initializer_list ,提供初始种子序列 |
类型要求 | ||
-InputIt 必须符合老式输入迭代器 (LegacyInputIterator) 的要求。
|
异常
3-4) 在分配失败时抛出 std::bad_alloc 。
示例
运行此代码
#include <random> #include <sstream> #include <iterator> int main() { std::seed_seq s1; // 可默认构造 std::seed_seq s2{1, 2, 3}; // 能用列表初始化 std::seed_seq s3 = {-1, 0, 1}; // 列表初始化的另一种形式 int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; std::seed_seq s4(a, a + 10); // 能用迭代器 std::istringstream buf("1 2 3 4 5"); std::istream_iterator<int> beg(buf), end; std::seed_seq s5(beg, end); // 即使是流输入迭代器 }
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 3422 | C++11 | 默认构造函数决不失败但可以不是 noexcept ; 初始化器列表构造函数禁用源自迭代器对的列表初始化 |
使之为 noexcept ; 已约束 |