gpt4 book ai didi

C++如何使用lambda表达式捕获前一次迭代的值?

转载 作者:行者123 更新时间:2023-11-30 04:42:21 24 4
gpt4 key购买 nike

我正在使用这个简单的示例创建一个简单的 vector ,其元素以严格递增的随机步长方式创建。我有一个使用函数对象的实现:

struct IncrementGenerator
{
int m;
IncrementGenerator() : m(0) {}
int operator()()
{
m += 1 + (rand() % 5); //random Increment between [1,5]
return m;
}
};

vector<int> myVector(10);
generate(myVector.begin()+1, myVector.end(), IncrementGenerator());

//example of the output: 0, 4, 6, 9, 10, 14, 15, 17, 20, 25,

我今天刚刚学习了 lambda 表达式,想用更短的代码来实现相同的实现。我不确定我是否可以捕获 lambda 表达式中的前一次迭代并在其上添加一个随机数:

// my idea is such, but not really sure what to write in the expression so i put some question mark.
generate(myVector.begin()+1, myVector.end(),[?]()->int{return ? + (1 + (rand()%5)) });

最佳答案

与上述类等价的 lambda 是这样的:

auto increment_generator = [m = 0]() mutable
{
m += 1 + (rand() % 5); //random Increment between [1,5]
return m;
};

请注意 mutable 修饰符,它表示捕获的 m 不是常量。默认情况下,lambda 捕获的变量是 const

关于C++如何使用lambda表达式捕获前一次迭代的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58786391/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com