初识lambda表达式

lambda表达式结构如下

现有以下数组:

int a[4] = {1, 2, 3, 4};


1. 各项平方

std::for_each(a, a + 4, [](int & _x) {_x *= _x;});//用引用修改值
std::for_each(a, a + 4, [](int _x) {std::cout<<_x<



2. 从大到小排序

	std::sort(a, a + 4, 
		[](int & _x1, int & _x2) ->bool 
	{
		if(_x1 > _x2) 
			return true; 
		else 
			return false;
	});
	std::for_each(a, a + 4, [](int _x) {std::cout<<_x<


3. 错误“IntelliSense: 返回没有显式返回类型的 lambda 的值正文必须是单个返回语句”

以2为例

	std::sort(a, a + 4, 
		[](int & _x1, int & _x2) ->bool//这里的bool是不能省略的,因为下方{}内函数体有多行语句,而且sort第三个参数二元谓词是有返回值的。如果是for_each,自然即使是多行也不需要返回值(参见4) 
	{
		if(_x1 > _x2) 
			return true; 
		else 
			return false;
	});
	std::for_each(a, a + 4, [](int _x) {std::cout<<_x<


单条语句,省略合法

		double a = 1.0;
		double b = 1.2;
		double c = [a, b] () {return a + b;}();//单条语句,省略->double合法
		std::cout<


4. 捕获列表

	int val = 2;
	int val2 = 1;

	std::for_each(a, a + 4, [](int i) {std::cout<


5. 使用auto给函数对象赋值

		double pi = 3.14;
		auto Fc = [pi] (double r) -> double//同样的,此处函数体中如果只有一条语句可省略-> double ,注意此处Fc前面一定是auto而不是double
		{
			return 2 * pi * r;
		};
		double c = Fc(1.0);
		std::cout<


你可能感兴趣的:(STL,C/C++基础知识)