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
не является целочисленным типом, программа является некорректной.
4)
Эквивалентно
seed_seq
(
il.
begin
(
)
, il.
end
(
)
)
. Этот конструктор позволяет
list-initialization
из списка начальных значений.
Эта перегрузка участвует в разрешении перегрузки только если
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 | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 2180 | C++11 | все конструкторы были не выбрасывающими исключения | только перегрузка ( 1 ) является не выбрасывающей исключения |
| LWG 3422 | C++11 |
1. перегрузка
(
1
)
не была noexcept
2. перегрузка ( 4 ) не была ограничена |
1. сделана noexcept
2. ограничена |