c++ - 根据模式用数字填充 C++ 数组

标签 c++ lambda c++17

我有一个要填充数组的模式:

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/

相关文章:

c++ - 作为 C++ 类的 Python 解释器

c# - 使 lambda 事件订阅者只触发一次然后将其删除

c# - 在 .Net 中设置/删除事件处理程序

python - 对 lambda 表达式的包装

c++ - 创建 string_view 元素数组会引发错误 : unable to find string literal operator ‘operator""sv’ with

c++ - 如何修复 : "FActorSpawnParameters is not defined" error in C++ in UE4?

java - 使用相机检测真实物体。使用相机寻找真实物体的可能性

c++ - 使用 C++20 比较 std::variant 和 int <=> 不是常量表达式

c++ - lower_bound() 算法/STL 使用前提条件

c++ - 如何使用 boolean 数组或 LogicalVector Rcpp::List getPIcvalue() 和 RcppExport SEXP mypackage5_getPIcvalue()