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)
である。
std::seed_seq
を範囲
[
begin
,
end
)
内の値で構築する。
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++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 2180 | C++11 | 全てのコンストラクタが非スロー | オーバーロード ( 1 ) のみが非スロー |
| LWG 3422 | C++11 |
1. オーバーロード
(
1
)
がnoexceptではなかった
2. オーバーロード ( 4 ) が制約されていなかった |
1. noexcept化
2. 制約追加 |