根据模式用数字填充C++数组
我有一个要填充数组的模式:
偶数指数值 = -1
奇数指数值 = 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在不同的调用中使用它,它会记住它的旧状态,这可能不是你想要的。
您可以通过编写一个函数来解决这个问题,该函数每次调用时都会为您提供一个“生成器”。请注意,返回值(即生成器本身)只是一个mutablelambda,因此 的值i在对该 lambda 的多次调用中得以保留。
auto gen()
{
return [i = -1]() mutable
{
i *= -1;
return i;
};
}
// usage ...
std::generate(arr.begin(), arr.end(), gen());
这是一个演示。