C++ lambda 语法

标签 c++ lambda

我有一个函数可以搜索迭代器 vector ,如果它的名称与作为参数传递的字符串匹配,则返回迭代器。

koalaGraph::PVertex lookUpByName(std::string Name, std::vector<koalaGraph::PVertex>& Vertices) {

    for (size_t i = 0; i < Vertices.size(); i++) {

        if(Vertices[i]->info.name == Name) 
            return Vertices[i];
    }
}

我的问题是如何将其实现为 lambda,以便将其与 std::find_if 结合使用?

我正在尝试这个:

std::vector<koalaGraph::PVertex> V;
std::string Name;
std::find_if(V.begin(), V.end(), [&Name]() {return Name == V->info.name;})

但是它说 V

an enclosing-function local variable cannot be referenced in a lambda body unless it is in the capture list.

最佳答案

find_if 会将 vector 的元素传递给您的 lambda。这意味着你需要

std::find_if(V.begin(), V.end(), [&Name](auto const& V) {return Name == V->info.name;})

因此 lambda 主体中的 V 是 vector 的元素,而不是 vector 本身。


理想情况下,你给它起一个不同于 V 的名字,这样你就可以像这样将 vector 和局部变量分开

std::find_if(V.begin(), V.end(), [&Name](auto const& element) {return Name == elememt->info.name;})

现在很明显,您正在处理 vector 的元素,而不是 vector 本身。

关于C++ lambda 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55243276/

相关文章:

c# - Entity Framework ,枚举支持 : Modify Expression in Linq Extension Method

list - 使用过滤器迭代列表

c++ - 使用 lambda 表达式对指向对象的指针列表进行排序

javascript - 使用 Lambda 函数在 Amazon S3 存储桶上创建缩略图

c++ - 对所有成员函数和属性使用 "this"是不好的做法吗?

c++ - 何时使用 =default 使析构函数默认?

c++ - 尝试堆插入时访问冲突写入位置

c++ - 使用 CStdioFile 写入字符串

c++ - 使用 c++11 复制代码

haskell - 如何在 Haskell 中编写递归 lambda 表达式?