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

问题描述 投票:1回答:1

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

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)) });
c++
1个回答
1
投票

相当于上述类的lambda是这样的:

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

注意mutable修饰符,该修饰符表示捕获的m不是恒定的。默认情况下,lambda捕获的变量为const

© www.soinside.com 2019 - 2024. All rights reserved.