C++ STD算法如何处理lambda指针?

C++ STD算法如何处理lambda指针?,c++,lambda,std,C++,Lambda,Std,所以我用这个小函数来打印一个向量。 它是有效的,但我正在努力理解它是如何工作的: void const print_vector(vector<int> const& v) { std::for_each(v.begin(), v.end(), [](const int& n) {std::cout << n << " ";}); } void const打印向量(向量const&v) { std::for_each(v.begin

所以我用这个小函数来打印一个向量。 它是有效的,但我正在努力理解它是如何工作的:

 void const print_vector(vector<int> const& v)
{
    std::for_each(v.begin(), v.end(), [](const int& n) {std::cout << n << " ";});
}
void const打印向量(向量const&v)
{

std::for_each(v.begin(),v.end(),[](const int&n){std::cout
n
没有指向任何东西。算法在容器上迭代,并使用其中的每个元素(通过取消引用迭代器)作为lambda的参数


请参见

您的代码与此等效:

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

void foo(const int& n) 
{ 
    std::cout << n << " "; 
}
void const打印向量(向量const&v)
{
std::for_each(v.begin()、v.end()、foo);
}
void foo(const int&n)
{ 
标准::cout
“n”变量如何知道指向向量的元素

n
只是函子的一个参数。它是一个引用,它指的是调用函子时作为参数传递给函子的任何对象。
std::for_each
是调用函子并传递参数的对象


另一方面,每个人都知道“点”因为您将指向向量的开始迭代器和结束迭代器作为参数传递给元素。
std::for_each
通过开始迭代器间接获取第一个元素,调用函子并将间接结果作为参数传递。然后
std::for_each
递增迭代器并重复,直到整个范围都被迭代了。

可能每个
的的也会有所帮助。它表明在一个带有参数的for循环中调用了。不值得添加另一个答案,但我想在下面添加这一点,就像你可以找到每个的一个可能实现,在那里你可以看到如何调用lamda。N请注意,无论您传递lambda、函数指针还是任何其他可调用函数,实现都是相同的……刚刚意识到Francois已经提供了下面相同的链接;)