21xrx.com
2024-06-03 03:34:28 Monday
登录
文章检索 我的文章 写文章
"C++函数的参数为匿名函数"
2023-07-14 14:13:37 深夜i     --     --
C++ 函数参数 匿名函数

在C++中,函数参数可以是匿名函数。匿名函数也被称为lambda函数,是一种能够在程序内部被声明、定义、使用的函数。Lambda函数的语法形式为:[捕获列表](参数列表) -> 返回类型 { 函数体 }。

匿名函数作为函数参数的最大好处在于,可以将函数定义与使用紧密地联系在一起,更加方便和灵活。比如,在STL中,常常使用lambda函数作为STL算法的谓词,来操作迭代器中的元素。

下面是一个使用lambda函数作为函数参数的例子:


#include <iostream>

#include <vector>

#include <algorithm>

int main()

{

  std::vector<int> v 3;

  int num = 3;

  auto it = std::find_if(v.begin(), v.end(), [num](int i) return i == num; );

  std::cout << "The number " << num << " is at position " << std::distance(v.begin(), it) << std::endl;

  return 0;

}

在这个程序中,std::find_if函数接受一个区间和一个谓词,返回区间中使谓词成立的第一个元素的迭代器。我们使用了lambda函数作为谓词,查找了一个值在vector中的位置,并输出了其位置。

Lambda函数还可以通过捕获列表来捕获其所在作用域中的变量。捕获列表是一对方括号,在其中列出需要捕获的变量名。捕获方式有两种:按值捕获和按引用捕获。按值捕获默认情况下是复制捕获,按引用捕获则使用&符号。

下面是一个lambda函数捕获变量的例子:


#include <iostream>

int main()

{

  int num = 3;

  auto f = [num]() mutable { num++; std::cout << "num is " << num << std::endl; };

  f();

  std::cout << "num is " << num << std::endl;

  return 0;

}

在这个程序中,我们使用lambda函数捕获了外层作用域中的变量num,并对其进行修改。注意,我们必须使用mutable关键字来表示这个lambda函数是可变的,否则编译器会报错。运行结果是:先输出“num is 4”,再输出“num is 3”。可以看到,lambda函数确实改变了num的值,但并没有影响到外层作用域。

总之,lambda函数作为函数参数是C++中的一项强大的语言特性。通过使用lambda函数,我们可以在程序内部方便地定义、声明、使用函数,使我们的程序更加灵活、强大。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复