std::seed_seq::seed_seq

来自cppreference.com
< cpp‎ | numeric‎ | random‎ | seed seq
 
 
 
 
std::seed_seq
成员函数
seed_seq::seed_seq
(C++11)
 
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) 构造 std::seed_seq ,以拥有从范围 [begin, end) 上迭代并以解引用迭代器复制值获得的值 modulo 232
(即复制低 32 位)为初始种子序列。
4) 等价于 seed_seq(il.begin(), il.end()) 。此构造函数启用源自种子值列表的列表初始化。此重载只有在 T 为整数类型时才会参与重载决议。

参数

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 ;
已约束