C++笔记-仿函数(functor)

STL6个组建:

1. 仿函数;

2. 算法;

3. 迭代器;

4. 空间配置器;

5. 容器;

6. 适配器;

 

仿函数一般不会单独使用,主要是为了搭配STL算法。

函数指针不能满足STL对抽象性的要求,不能满足软件积木的要求,无法和STL其他组建搭配;

本质就是类重载了一个operator(),创建一个行为类似函数的对象。

如下C++容器排序的过程。

程序运行截图都这样:

C++排序过程

#include <iostream>
#include <algorithm>

using namespace std;

bool mySort(int a, int b) {

	return a > b;
}

void display(int a) {

	cout << a << " ";
}

int main() {

	int arr1[] = { 5, 4, 2, 1, 7, 99 };
	sort(arr1, arr1 + 6, mySort);
	for_each(arr1, arr1 + 6, display);
	getchar();

	return 0;
}

C++模板

#include <iostream>
#include <algorithm>

using namespace std;

template<class T>
inline bool mySort(T const &a, T const &b) {

	return a > b;
}

template<class T>
inline void display(T const &a) {

	cout << a << " ";
}

int main() {

	int arr1[] = { 5, 4, 2, 1, 7, 99 };
	sort(arr1, arr1 + 6, mySort<int>);
	for_each(arr1, arr1 + 6, display<int>);
	getchar();

	return 0;
}

使用C++仿函数来做:

#include <iostream>
#include <algorithm>

using namespace std;

struct Sort {

	bool operator()(int a, int b) {

		return a < b;
	}
};

struct Display {

	void operator()(int a) {

		cout << a << " ";
	}
};

int main() {

	int arr1[] = { 5, 4, 2, 1, 7, 99 };
	sort(arr1, arr1 + 6, Sort());
	for_each(arr1, arr1 + 6, Display());
	getchar();

	return 0;
}

使用C++仿函数模版来做:

#include <iostream>
#include <algorithm>

using namespace std;

template<class T>
struct Sort {

	bool operator()(T const &a, T const &b) {

		return a < b;
	}
};

template<class T>
struct Display {

	void operator()(T const &a) {

		cout << a << " ";
	}
};

int main() {

	int arr1[] = { 5, 4, 2, 1, 7, 99 };
	sort(arr1, arr1 + 6, Sort<int>());
	for_each(arr1, arr1 + 6, Display<int>());
	getchar();

	return 0;
}

 

 

 

相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页