std::ranges::generate — fill range with generated values.
1#include <ranges>23std::vector<int> v(10);45// Generate with counter6int counter = 0;7std::ranges::generate(v, [&counter] { return counter++; });8// v = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}910// Generate with function11std::ranges::generate(v, [i = 0]() mutable { return i * i; });12// v = {0, 1, 4, 9, 16, 25, 36, 49, 64, 81}1314// Generate Fibonacci15std::vector<int> fib(10);16int a = 0, b = 1;17std::ranges::generate(fib, [&a, &b] {18 int temp = a;19 a = b;20 b = temp + b;21 return temp;22});23// fib = {0, 1, 1, 2, 3, 5, 8, 13, 21, 34}2425// Generate with index26std::vector<int> indexed(5);27std::ranges::generate(indexed, [i = 0]() mutable {28 return i++ * 10;29});30// indexed = {0, 10, 20, 30, 40}
Benefits: