// 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++; });
Именно последовательные числа для BidirectionalIterator или RandomAccessIterator сгенерирует? (взято отсюда)
C++20 standard открой, там 25.7.7 пунтк явно написано: Effects: Assigns the result of successive evaluations of gen() through each iterator in the range [first, first + N ). То есть, заполняет интервал ПОСЛЕДОВАТЕЛЬНЫЙ вызов gen() .
да, но про порядок обхода range в этом предложении ничего не сказано
Там ForwardIterator принимает, там нельзя переупорядичавть итераторы.
ForwardIterator, кстати, offer the multi-pass guarantee, так что тоже ничего не гарантирует в части порядка
Напиши над функтор один комбинатор, потом юзай std iota: template <typename R> struct combinator{ R r; using T=decltype(R()); operator T() { return r();} combinator& operator++(){ return *this;} }; std::iota( vec.begin(), vec.end(), combinator{[]{ static int i; return i++; }});
Обсуждают сегодня