Namespaces
Variants

std::seed_seq:: seed_seq

From cppreference.net
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) 默认构造函数。构造完成后, v 为空。
2) 复制构造函数被删除: std::seed_seq 不可复制。
3) 使用范围 [ begin , end ) 中的值构造一个 std::seed_seq 。等效于先对 v 进行默认初始化,然后执行 for ( InputIt s = begin ; s ! = end ; ++ s )
v  . push_back ( modseed ( * s ) ) ;
,其中 mod_seed(x)=x mod 2 32
如果 std:: iterator_traits < InputIt > :: value_type 不是整数类型,则程序非良构。
如果 InputIt 不满足 LegacyInputIterator 的要求,则行为未定义。
4) 等价于 seed_seq ( il. begin ( ) , il. end ( ) ) 。此构造函数支持通过种子值列表进行 列表初始化
仅当 T 为整数类型时,此重载才会参与重载决议。

参数

begin, end - 表示初始种子序列的迭代器对
il - 初始种子序列

示例

#include <iterator>
#include <random>
#include <sstream>
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 2180 C++11 所有构造函数均为非抛出异常 仅重载 ( 1 ) 为非抛出异常
LWG 3422 C++11 1. 重载 ( 1 ) 未声明为noexcept
2. 重载 ( 4 ) 未添加约束
1. 改为noexcept
2. 添加约束