Introduction
stateful , std:: generate, , , , , , .
25.1p10 - [algorithms.general]
[. , , , obejcts. , imoprtant, -, , reference_wrapper - . - ]
/
, last - first (N) , . Q & A:
+ std::generate, ?
, , .
std:: generate , , std:: generate, , , , , , .
. , :
#include <iostream>
#include <algorithm>
template<class id_type>
struct id_generator {
id_type operator() () {
return ++idx;
}
id_type next_id () const {
return idx + 1;
}
id_type idx {};
};
int main () {
id_generator<int> gen;
std::vector<int> vec1 (5);
std::vector<int> vec2 (5);
std::generate (vec1.begin (), vec1.end (), gen);
std::generate (vec2.begin (), vec2.end (), gen);
std::cout << gen.next_id () << std::endl;
}
, gen.next_id () 11, 5 vec1 5 vec2.
, std:: generate id_generator , , .
?
, , std:: .
# 1
- std::reference_wrapper std::ref <functional>. reference_wrapper, generate_id .
std::generate (vec1.begin (), vec1.end (), std::ref (gen));
std::generate (vec2.begin (), vec2.end (), std::ref (gen));
std::cout << gen.next_id () << std::endl;
№ 2
, , , - , :
std::generate<decltype(vec1.begin()), id_generator<int>&>(vec1.begin(), vec1.end(), gen);