【问题标题】:variables aren't updated in lambda c++lambda c++ 中的变量未更新
【发布时间】:2023-02-21 19:52:56
【问题描述】:

我是 c++ 的新手,我在我的一个项目中使用 lambdas。但是我的项目没有工作,因为我的变量没有在 lambda 中更新。这是一个例子:

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int> vec = {1,2,3}; //declaring vector with 3 elements
    
    auto lambda = [vec]{ //declaring the lamba
        for(auto i:vec){ //looping through every item of the vector as i
            cout<<i<<endl; //outputing i followed by a new line
        }
    };
    
    lambda(); //outputs 1 2 and 3
    
    vec.push_back(4); //adding 4 to the vector
    
    lambda(); //still outputs 1 2 and 3. why isn't the 4 outputed?
}

请帮我解决这个问题。我不知道如何解决它。

【问题讨论】:

    标签: c++ vector lambda


    【解决方案1】:

    [vec] 正在按值捕获向量。创建一个副本。

    如果您希望更新它,请使用 [&amp;vec] 通过引用捕获。

    【讨论】:

      【解决方案2】:

      您捕获了矢量的副本,但您需要一个参考:

      auto lambda = [&vec]{  // <---- reference capture
          for(auto i:vec){
              cout<<i<<endl;
          }
      };
      

      lambda 是带有 operator() 和捕获成员的类的简写。当您捕获 vec 时,该类的实例有一个通过复制 vec 初始化的成员。当您通过引用捕获向量时,该成员不是副本。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-07
        • 1970-01-01
        • 1970-01-01
        • 2019-09-05
        • 2016-07-03
        • 2021-02-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多