Namespaces
Variants

std::ranges::generate_random

cppreference.net에서
 
 
알고리즘 라이브러리
제약 알고리즘 및 범위 기반 알고리즘 (C++20)
제약 알고리즘, 예: ranges::copy, ranges::sort, ...
정렬 및 관련 연산
분할 연산
(C++11)    

정렬 연산
이진 탐색 연산
(분할된 범위에 대해)
집합 연산 (정렬된 범위에 대해)
병합 연산 (정렬된 범위에 대해)
힙 연산
최소/최대 연산
(C++11)
(C++17)
사전식 비교 연산
순열 연산


 
제약 알고리즘
이 메뉴의 모든 이름은 네임스페이스 std::ranges
에 속합니다.비수정 시퀀스 연산
수정 시퀀스 연산
분할 연산
정렬 연산
이진 탐색 연산 (정렬된 범위에 대해)
       
       
집합 연산 (정렬된 범위에 대해)
힙 연산
최소/최대 연산
       
       
순열 연산
폴드 연산
수치 연산
(C++23)            
초기화되지 않은 저장소에 대한 연산
반환 타입
 
헤더 <random>
에 정의됨호출 시그니처
template< class R, class G >
    requires ranges::output_range<R, std::invoke_result_t<G&>> &&
             std::uniform_random_bit_generator<std::remove_cvref_t<G>>
constexpr ranges::borrowed_iterator_t<R>
    generate_random( R&& r, G&& g );
(1) (C++26부터)
template< class G, std::output_iterator<std::invoke_result_t<G&>> O,
          std::sentinel_for<O> S >
    requires std::uniform_random_bit_generator<std::remove_cvref_t<G>>
constexpr O
    generate_random( O first, S last, G&& g );
(2) (C++26부터)
template< class R, class G, class D >
    requires ranges::output_range<R, std::invoke_result_t<D&, G&>> &&
             std::invocable<D&, G&> &&
             std::uniform_random_bit_generator<std::remove_cvref_t<G>> &&
             std::is_arithmetic_v<std::invoke_result_t<D&, G&>>
constexpr ranges::borrowed_iterator_t<R>
    generate_random( R&& r, G&& g, D&& d );
(3) (C++26부터)
template< class G, class D, std::output_iterator<std::invoke_result_t<D&, G&>> O,
          std::sentinel_for<O> S >
    requires std::invocable<D&, G&> &&
             std::uniform_random_bit_generator<std::remove_cvref_t<G>> &&
             std::is_arithmetic_v<std::invoke_result_t<D&, G&>>
constexpr O
    generate_random( O first, S last, G&& g, D&& d );
(4) (C++26부터)

난수 생성기의 generate_random 멤버 함수나 분포를 사용하여 난수를 생성하려고 시도하며, 이는 더 효율적일 것으로 예상됩니다. generate_random 멤버 함수를 사용할 수 없는 경우 요소별 생성을 대체합니다.

대체 연산이란 ranges::generate(std::forward<R>(r), std::ref(g)) 또는 ranges::generate(std::forward<R>(r), [&d, &g] { return std::invoke(d, g); })을(를) 각각 (1) 또는 (3)에 대해 호출하는 것을 말합니다.

1) 이 표현식이 유효하면 g.generate_random(std::forward<R>(r))을(를) 호출합니다.
그렇지 않으면 I을(를) std::invoke_result_t<G&>로 둡니다. R이(가) sized_range 모델인 경우, r을(를) ranges::size(r) 유형의 I 값들로 채우는데, 이는 값 g()과(와) g.generate_random(s) 유형의 객체 N에 대해 s 또는 std::span<I, N> 형식의 표현식이 유효하다면 그러한 호출을 지정되지 않은 횟수만큼 수행하여 채웁니다.
그렇지 않으면 대체 연산을 수행합니다.
3) 이 표현식이 유효하면 d.generate_random(std::forward<R>(r), g)을(를) 호출합니다.
그렇지 않으면 I을(를) std::invoke_result_t<D&, G&>로 둡니다. R이(가) sized_range 모델인 경우, r을(를) ranges::size(r) 유형의 I 값들로 채우는데, 이는 값 std::invoke(d, g)과(와) d.generate_random(s, g) 유형의 객체 N에 대해 s 또는 std::span<I, N> 형식의 표현식이 유효하다면 그러한 호출을 지정되지 않은 횟수만큼 수행하여 채웁니다.
그렇지 않으면 대체 연산을 수행합니다.
2,4) 각각 (1,3)과 동일하며, 여기서 r은(는) ranges::subrange<O, S>(std::move(first), last)에서 얻습니다.

(1) 또는 (3)의 효과가 해당 대체 연산의 효과와 동등하지 않으면 동작이 정의되지 않습니다.

N의 값은 호출 간에 다를 수 있습니다. 구현에서는 더 짧은 범위에 대해 더 작은 값을 선택할 수 있습니다.

이 페이지에 설명된 함수형 개체는 알고리즘 함수 개체(비공식적으로 니블로이드라고 함)입니다. 즉,

  • 이들 중 하나를 호출할 때 명시적 템플릿 인자 목록을 지정할 수 없습니다.
  • 이들 중 어느 것도 인자 종속 조회에 보이지 않습니다.
  • 이들 중 하나가 일반 비한정 조회에 의해 함수 호출 연산자의 왼쪽에 있는 이름으로 발견되면, 인자 종속 조회가 억제됩니다.

매개변수

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

참고 항목

함수의 결과를 범위에 저장함
(알고리즘 함수 객체)
타입이 균일 난수 비트 생성기로 적합함을 명시함
(컨셉)