std::generate_n
출처: ko.cppreference.net
| 헤더에 정의됨 <algorithm>
|
||
template< class OutputIt, class Size, class Generator >
OutputIt generate_n( OutputIt first, Size count, Generator g );
|
(1) | (C++20부터 constexpr) |
template< class ExecutionPolicy,
class ForwardIt, class Size, class Generator >
ForwardIt generate_n( ExecutionPolicy&& policy,
ForwardIt first, Size count, Generator g );
|
(2) | (C++17부터) |
1) 주어진 함수 객체에 의해 생성된 값을
g, 처음 count개의 요소에, 범위 시작 위치는 first, 단 count > 0. 그렇지 않으면 아무것도 하지 않습니다.2) 와 동일 (1)하지만 에 따라 실행됩니다
policy. 이 오버로드는 다음 표현식의 값이 인 경우에만 오버로드 해결에 참여합니다:
true:
|
|
(C++20까지) |
|
|
(C++20부터) |
만약 Size가 변환 가능하지않으면 정수형, 프로그램의 형식이 잘못되었습니다.
매개변수
| first | - | 생성할 요소 범위의 시작 | ||||||
| count | - | 생성할 요소의 개수 | ||||||
| policy | - | 사용할 실행 정책 | ||||||
| g | - | 호출될 생성기 함수 객체. 함수의 시그니처는 다음과 같아야 합니다:
타입 | ||||||
| 타입 요구 사항 | ||||||||
-OutputIt는 LegacyOutputIterator의 요구 사항을 충족해야 합니다.
| ||||||||
-ForwardIt는 LegacyForwardIterator의 요구 사항을 충족해야 합니다.
| ||||||||
반환값
할당된 마지막 요소의 다음 반복자, 단 count > 0, first.
복잡도
정확히 std::max(0, count)번의 g() 호출 및 대입.
예외
템플릿 매개변수 ExecutionPolicy가 있는 오버로드는 다음과 같이 오류를 보고합니다:
- 알고리즘의 일부로 호출된 함수의 실행이 예외를 던지고
ExecutionPolicy가 표준 정책 중 하나인 경우 std::terminate가 호출됩니다. 다른ExecutionPolicy의 경우 동작은 구현 정의입니다. - 알고리즘이 메모리 할당에 실패하면 std::bad_alloc이 발생합니다.
가능한 구현
template<class OutputIt, class Size, class Generator>
constexpr // since C++20
OutputIt generate_n(OutputIt first, Size count, Generator g)
{
for (Size i = 0; i < count; ++i, ++first)
*first = g();
return first;
}
|
예제
이 코드 실행
#include <algorithm>
#include <functional>
#include <iostream>
#include <iterator>
#include <random>
int main()
{
std::mt19937 rng; // default constructed, seeded with fixed seed
std::generate_n(std::ostream_iterator<std::mt19937::result_type>(std::cout, " "),
5, std::ref(rng));
std::cout << '\n';
}
출력:
3499211612 581869302 3890346734 3586334585 545404204
결함 보고서
다음 동작 변경 결함 보고서는 이전에 발행된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 발행 시 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 426 | C++98 | 복잡도 요구 사항이 '정확히 count번의 호출또는 대입'이었는데, count가 음수이면 잘못됨
|
호출 또는 대입 없음 단 count가 양수가 아닌 경우
|
| LWG 865 | C++98 | 생성 범위 다음의 첫 번째 요소의 위치 가 반환되지 않음 |
반환됨 |
같이 보기
| 범위의 N개 요소에 주어진 값을 복사 대입 (함수 템플릿 & 알고리즘 함수 객체) | |
(C++20) |
|
| 연속적인 함수 호출의 결과를 범위의 모든 요소에 할당 (함수 템플릿 & 알고리즘 함수 객체) | |
(C++20) |
|
(C++20) |
함수를 N번 적용한 결과를 저장 (알고리즘 함수 객체) |