我有一个要填充数组的模式:
even indices value = -1
odd indices value = 1
我目前是这样实现的:
#include <array>
#include <algorithm>
using namespace std;
int generator(){
static int i = 1;
i *= -1;
return i;
}
std::array<int ,64> arr;
std::generate(arr.begin(), arr.end(), generator);
编辑:当前实现有一个警告 - 返回值 generator
不依赖于迭代的对象索引。有没有办法将当前索引传递给
generator
函数所以它的输出将取决于这个索引?
最佳答案
您的 generator
函数有一个 static
局部变量,它在每次调用时保持其状态。这意味着如果你使用 generator
在另一个调用中,它会记住它的旧状态,这可能不是您想要的。
您可以通过编写一个函数来解决此问题,该函数每次调用时都会为您提供一个“生成器”。请注意,返回值(即生成器本身)只是一个 mutable
lambda,使得 i
的值在对该 lambda 的多次调用中保留。
auto gen()
{
return [i = -1]() mutable
{
i *= -1;
return i;
};
}
// usage ...
std::generate(arr.begin(), arr.end(), gen());
这是一个 demo .
关于c++ - 根据模式用数字填充 C++ 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66626257/