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
不是整数类型,则程序非良构。
仅当
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. 添加约束 |