std::ranges:: generate_random
std::ranges
| Non-modifying sequence operations | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Modifying sequence operations | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Partitioning operations | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Sorting operations | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Binary search operations (on sorted ranges) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Set operations (on sorted ranges) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Heap operations | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Minimum/maximum operations | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Permutation operations | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Fold operations | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Operations on uninitialized storage | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Return types | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
헤더에 정의됨
<random>
|
||
|
호출 시그니처
|
||
|
template
<
class
R,
class
G
>
requires
ranges::
output_range
<
R,
std::
invoke_result_t
<
G
&
>>
&&
|
(1) | (C++26부터) |
|
template
<
class
G,
std::
output_iterator
<
std::
invoke_result_t
<
G
&
>>
O,
std::
sentinel_for
<
O
>
S
>
|
(2) | (C++26부터) |
|
template
<
class
R,
class
G,
class
D
>
requires
ranges::
output_range
<
R,
std::
invoke_result_t
<
D
&
, G
&
>>
&&
|
(3) | (C++26부터) |
|
template
<
class
G,
class
D,
std::
output_iterator
<
std::
invoke_result_t
<
D
&
, G
&
>>
O,
std::
sentinel_for
<
O
>
S
>
|
(4) | (C++26부터) |
난수 생성기의
generate_random
멤버 함수 또는 분포를 사용하여 난수를 생성하려고 시도하며, 이는 더 효율적일 것으로 예상됩니다.
generate_random
멤버 함수를 사용할 수 없는 경우 요소별 생성으로 대체됩니다.
폴백(fallback) 연산은 각각 ranges:: generate ( std:: forward < R > ( r ) , std:: ref ( g ) ) 또는 ranges:: generate ( std:: forward < R > ( r ) , [ & d, & g ] { return std:: invoke ( d, g ) ; } ) 를 호출하는 것으로 합니다. 이는 각각 (1) 또는 (3) 에 해당합니다.
R
이
sized_range
를 모델링하면,
r
을
ranges::
size
(
r
)
개의
I
값으로 채우는데, 이는 지정되지 않은 횟수의
g
(
)
또는
g.
generate_random
(
s
)
형태의 호출을 수행하여 이루어집니다. 단, 이러한 표현식이 값
N
과
std::
span
<
I, N
>
타입의 객체
s
에 대해 형식이 올바른 경우에 한합니다.
R
이
sized_range
를 모델링하는 경우,
r
을
ranges::
size
(
r
)
개의
I
타입 값으로 채웁니다. 이는 지정되지 않은 횟수의 다음 형태 호출을 수행하여 이루어집니다:
std::
invoke
(
d, g
)
또는
d.
generate_random
(
s, g
)
(이 표현식이 값
N
과
s
객체(타입
std::
span
<
I, N
>
)에 대해 형식이 올바른 경우).
(1) 또는 (3) 의 효과가 해당 폴백 연산의 효과와 동등하지 않을 경우, 그 동작은 정의되지 않습니다.
N
의 값은 호출마다 다를 수 있습니다. 구현체는 더 짧은 범위에 대해 더 작은 값을 선택할 수 있습니다.
이 페이지에서 설명하는 함수형 개체들은 algorithm function objects (일반적으로 niebloids 로 알려진)입니다. 즉:
- 명시적 템플릿 인수 목록은 이들 중 어느 것을 호출할 때도 지정할 수 없습니다.
- 이들 중 어느 것도 인수 의존 이름 검색 에 보이지 않습니다.
- 이들 중 어느 것이 일반 비한정 이름 검색 에 의해 함수 호출 연산자의 왼쪽 이름으로 발견될 때, 인수 의존 이름 검색 이 억제됩니다.
목차 |
매개변수
| first, last | - | 난수를 기록할 요소들의 범위 를 정의하는 반복자-감시자 쌍 |
| r | - |
난수가 기록될
range
객체
|
| g | - | 균일 난수 비트 생성기 |
| d | - | 난수 분포 객체 |
참고 사항
std::ranges::generate_random
이 표준화될 당시, 표준 라이브러리에는
generate_random
멤버 함수를 제공하는 난수 생성기나 분포가 존재하지 않았습니다.
std::ranges::generate_random
는 기본 벡터화된 API를 래핑하는 사용자 정의 난수 생성기와 함께 사용될 때 더 효율적일 수 있습니다.
| Feature-test 매크로 | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_ranges_generate_random
|
202403L
|
(C++26) |
std::ranges::generate_random
|
예제
#include <algorithm> #include <iomanip> #include <iostream> #include <random> int main() { std::default_random_engine eng; std::default_random_engine::result_type rs[16]{}; std::ranges::generate_random(rs, eng); std::cout << std::left; for (int i{}; auto n : rs) std::cout << std::setw(11) << n << (++i % 4 ? ' ' : '\n'); }
가능한 출력:
16807 282475249 1622650073 984943658 1144108930 470211272 101027544 1457850878 1458777923 2007237709 823564440 1115438165 1784484492 74243042 114807987 1137522503
참고 항목
|
(C++20)
|
함수의 결과를 범위에 저장함
(알고리즘 함수 객체) |
|
(C++20)
|
타입이 균일 난수 비트 생성기로 적합함을 명시함
(컨셉) |