根据模式用数字填充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());

这是一个演示。


以上是根据模式用数字填充C++数组的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>