第四十七节 C++ 匿名函数对象 - lambda 表达式

函数对象:函数的对象, 实现operator(), 常用于算法中。详见上一节函数对象的讲解

lambda表达式属于函数对象,但其是匿名的。

分为:

1 一元函数的lambda表达式(不使用捕获列表,使用捕获列表)

2 一元谓词的lambda表达式 (不使用捕获列表,使用捕获列表)

3 二元函数的lambda表达式(不使用捕获列表,使用捕获列表)

4 二元谓词的lambda表达式 (不使用捕获列表,使用捕获列表)

这里仅简单列举几个例子。

#include 
#include 
#include 
#include 

using namespace std;

/*1 函数模板:为了打印不同类型的内容*/
template 
void DisplayContent(const T1 input) {
	int index = 0;

	for (auto Iterator = input.begin(); Iterator != input.end(); ++Iterator) {
		index = std::distance(input.begin(), Iterator);
		cout << " [" << index << "] = ";
		cout << *Iterator << endl;
	}
	cout << endl;
}

int main()
{
	std::vector  intVector;
	for (int index = 0; index < 6; ++index) {
		intVector.push_back(index);
	}
	/*使用函数对象-一元函数 lambda表达式,用于STL算法for_each()*/
	auto lambdaFormat1 = [](const int& value) {
		cout << value << " ";
	};  //注意分号
	cout << "lambdaFormat1: the original data:" << endl;
	std::for_each(intVector.begin(), intVector.end(), lambdaFormat1);
	cout << endl;

	/*使用函数对象- 一元谓词,用于STL算法find_if*/
	int divInput = 2;
	auto lambdaFormat2 = [divInput](const int& value) {
		return (value % divInput == 0);
	};//注意分号
	cout << "lambdaFormat2:the value%2 == 0 data:" << endl;
	auto Iterator = std::find_if(intVector.begin() + 3, intVector.end(), lambdaFormat2);
	if (Iterator != intVector.end())
		cout << "value = " << *Iterator << endl;
	cout << endl;

	/*使用函数对象- 二元谓词,用于STL算法sort()排列顺序不考虑大小写*/
	std::vector  charVector;
	charVector.push_back('b');
	charVector.push_back('A');
	charVector.push_back('D');
	charVector.push_back('e');
	cout << "original char data:" << endl;
	DisplayContent(charVector);

	cout << "defalut sort():" << endl;
	sort(charVector.begin(), charVector.end());
	DisplayContent(charVector);

	cout << "lambdaFormat3: re-sort():" << endl;
	auto lambdaFormat3 = [] (const char& value1, const char& value2) {
		return value1 > value2;
	};//注意分号
	sort(charVector.begin(), charVector.end(), lambdaFormat3);
	DisplayContent(charVector);
	return 0;
}
lambdaFormat1: the original data:
0 1 2 3 4 5
lambdaFormat2:the value%2 == 0 data:
value = 4

original char data:
 [0] = b
 [1] = A
 [2] = D
 [3] = e

defalut sort():
 [0] = A
 [1] = D
 [2] = b
 [3] = e

lambdaFormat3: re-sort():
 [0] = e
 [1] = b
 [2] = D
 [3] = A



你可能感兴趣的:(C++,C++基础)