在C ++中,我们具有类似std::fill或的函数,std::fill_n这些函数是方便的单行方式,以指针数组,向量,std::arrays和其他容器填充值。一些容器也有其自己的fill方法以允许填充恒定值。还有函数std::generate{_n}和std::iota,前者允许使用生成器函数填充元素,后者则用索引填充范围。
我正在寻找的是一种类似的解决方案-最好是一种单线解决方案,并在标准库中定义-该解决方案允许使用某些索引功能填充容器。例如,这将是数组的解决方案:
std::array<int, 100> arr;
for (std::size_t i = 0; i < 100; i++)
arr[i] = f(i);
Run Code Online (Sandbox Code Playgroud)
f(std::size_t i)索引的某些功能在哪里。
有整合的方法吗?
您可以使用有状态的lambda:
std::array<int, 100> arr;
std::generate(arr.begin(), arr.end(), [i = std::size_t(0)]() mutable {return f(i++);});
Run Code Online (Sandbox Code Playgroud)
但是我认为这使代码变得比需要的更为复杂。使用普通循环可能是最好的选择。