std::generate
Min standard notice:
Header: <algorithm>
- Assigns each element in range [first,last) a value generated by the given function object g.
# Declarations
template< class ForwardIt, class Generator >
void generate( ForwardIt first, ForwardIt last, Generator g );
(constexpr since C++20)
template< class ExecutionPolicy, class ForwardIt, class Generator >
void generate( ExecutionPolicy&& policy,
ForwardIt first, ForwardIt last, Generator g );
(since C++17)
# Parameters
first, last: the range of elements to generatepolicy: the execution policy to useg: generator function object that will be called. The signature of the function should be equivalent to the following: Ret fun(); The type Ret must be such that an object of type ForwardIt can be dereferenced and assigned a value of type Ret.
# Example
#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);
}