gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:32:27 26 4
gpt4 key购买 nike

我不确定,但也许你能帮我。

如何访问 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”,并且 vector 中大于 lim 的所有值都将在 vector 内删除。但是我怎样才能避免使用全局变量 lim 来保存值呢?

谢谢。

最佳答案

使用 lambda 捕获。注意 [&]
这是一个demo .

#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)
}

关于可变的更多信息:Why does C++0x's lambda require "mutable" keyword for capture-by-value, by default?

关于c++ - 如何在不使用全局变量的情况下访问 lambda 中的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43255346/

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