如何在不使用全局变量的情况下访问 lambda 中的变量



我不确定,但也许你可以帮助我。

如何访问 lambda 中的变量?例:

float lim;
int main()
{
  std::cin >> lim;
  std::vector<float> v = {1.0f,4.5f,3.9f,0.2f,8.4f};
  v.erase(std::remove_if(v.begin(),v.end(),[](float f){return f > lim}),v.end());
  for (auto i : v) std::cout << i;
  return 0;
}

所以这个例子有效,我可以指定一个值"lim",并且大于 lim 的向量中的所有值都将在向量内删除。但是我怎样才能避免全局变量 lim 来保存该值呢?

谢谢。

将 lambda 与捕获一起使用。 请注意[&]
这是一个演示。

#include <iostream>
using namespace std;
int main() {
    int k=0;int n=0;
    auto func1=[=]()mutable{k=1;n=1;};  //capture k by value
    func1();
    std::cout<<k<<std::endl;  //print 0
    auto func2=[&](){k=2;n=1;};         //capture k by reference
    func2();
    std::cout<<k<<std::endl;  //print 2  (k changed)
    auto func3=[k]()mutable{k=3;/* n=1; compile fail*/}; //capture k by value
    func3();
    std::cout<<k<<std::endl;  //print 2
    auto func4=[&k](){k=4;      /* n=1; compile fail*/}; //capture k by reference
    func4();
    std::cout<<k<<std::endl;  //print 4  (k changed)
} 

更多关于mutable:为什么C++0x的lambda默认需要"可变"关键字才能按值捕获?

相关内容

  • 没有找到相关文章

最新更新