std::generate
cppreference.net에서
| 헤더 <algorithm>
|
||
template< class ForwardIt, class Generator >
void generate( ForwardIt first, ForwardIt last, Generator g );
|
에 정의됨 (1) | (C++20부터 constexpr) |
template< class ExecutionPolicy, class ForwardIt, class Generator >
void generate( ExecutionPolicy&& policy,
ForwardIt first, ForwardIt last, Generator g );
|
(2) | (C++17부터) |
1) 범위
[first, last)의 각 요소에 주어진 함수 객체 g가 생성한 값을 할당합니다.2) (1)과 동일하지만
policy에 따라 실행됩니다. 이 오버로드는 다음 표현식의 값이
true인 경우에만 오버로드 해결에 참여합니다:
|
|
(C++20까지) |
|
|
(C++20부터) |
매개변수
| first, last | - | 생성할 요소의 범위를 정의하는 반복자 쌍 | ||||||
| policy | - | 사용할 실행 정책 | ||||||
| g | - | 호출될 생성자 함수 객체. 함수의 시그니처는 다음과 같아야 합니다:
| ||||||
| 타입 요구 사항 | ||||||||
-ForwardIt는 LegacyForwardIterator의 요구 사항을 충족해야 합니다.
| ||||||||
복잡도
정확히 std::distance(first, last)번의 g() 호출 및 할당.
예외
ExecutionPolicy이라는 템플릿 매개변수가 있는 오버로드는 다음과 같이 오류를 보고합니다:
- 알고리즘의 일부로 호출된 함수의 실행이 예외를 던지고
ExecutionPolicy이 표준 정책 중 하나인 경우 std::terminate가 호출됩니다. 다른ExecutionPolicy의 경우 동작은 구현 정의입니다. - 알고리즘이 메모리 할당에 실패하면 std::bad_alloc이 던져집니다.
가능한 구현
template<class ForwardIt, class Generator>
constexpr //< since C++20
void generate(ForwardIt first, ForwardIt last, Generator g)
{
for (; first != last; ++first)
*first = g();
}
|
예제
이 코드 실행
#include <algorithm>
#include <iostream>
#include <vector>
void println(std::string_view fmt, const auto& v)
{
for (std::cout << fmt; const auto& e : v)
std::cout << e << ' ';
std::cout << '\n';
};
int f()
{
static int i;
return ++i;
}
int main()
{
std::vector<int> v(5);
std::generate(v.begin(), v.end(), f);
println("v: ", v);
// Initialize with default values 0,1,2,3,4 from a lambda function
// Equivalent to std::iota(v.begin(), v.end(), 0);
std::generate(v.begin(), v.end(), [n = 0] () mutable { return n++; });
println("v: ", v);
}
출력:
v: 1 2 3 4 5
v: 0 1 2 3 4
참고 항목
| 범위의 모든 요소에 주어진 값을 복사 할당합니다 (함수 템플릿 & 알고리즘 함수 객체) | |
(C++20) |
|
| 연속적인 함수 호출의 결과를 범위의 N개 요소에 할당합니다 (함수 템플릿 & 알고리즘 함수 객체) | |
(C++20) |
|
(C++11) |
시작 값의 연속적인 증분으로 범위를 채웁니다 (함수 템플릿 & 알고리즘 함수 객체) |
(C++23) |
|
(C++20) |
범위에 함수의 결과를 저장합니다 (알고리즘 함수 객체) |