STD 算法如何处理 lambda 指针?

M_N*_*_N1 2 c++ lambda std

所以我使用这个小函数来打印一个向量。它有效,但我试图了解它是如何工作的:

 void const print_vector(vector<int> const& v)
{
    std::for_each(v.begin(), v.end(), [](const int& n) {std::cout << n << " ";});
}
Run Code Online (Sandbox Code Playgroud)

“n”变量如何知道指向向量的元素?

任何进一步的更正也表示赞赏

谢谢!

Jas*_*ent 7

您的代码等效于:

void const print_vector(vector<int> const& v)
{
    std::for_each(v.begin(), v.end(), foo);
}

void foo(const int& n) 
{ 
    std::cout << n << " "; 
}
Run Code Online (Sandbox Code Playgroud)

您的 lambda 只是声明函数的一种简写方式foo

foo然后将 的地址传递给for_each

for_each循环遍历向量并foo每次调用,将当前元素作为参数传入n

(注意:它并不完全等价。lambda 实际上是一个函子,而不是一个函数,但这只是混淆了问题,在这里没有区别。)

  • 也许“for_each”的[可能的实现](https://en.cppreference.com/w/cpp/algorithm/for_each#Possible_implementation)也会有所帮助。它表明在“for”循环中使用参数调用了“foo”。 (4认同)