c++STL内建函数对象、仿函数——全面总结(附案例解析)(二十二)

这里有C++STL——全面总结详细教程(附案例解析)(持续更新中)


 

内建函数对象

内建函数对象意义

概念:

  • STL内建了一些函数对象

分类:

  • 算术仿函数

  • 关系仿函数

  • 逻辑仿函数

用法:

  • 这些仿函数所产生的对象,用法和一般函数完全相同
  • 使用内建函数对象,需要引入头文件 #include<functional>

算术仿函数

功能描述:

  • 实现四则运算

    扫描二维码关注公众号,回复: 10272016 查看本文章
  • 其中negate是一元运算,其他都是二元运算

仿函数原型:

  • template<class T> T plus<T> //加法仿函数
  • template<class T> T minus<T> //减法仿函数
  • template<class T> T multiplies<T> //乘法仿函数
  • template<class T> T divides<T> //除法仿函数
  • template<class T> T modulus<T> //取模仿函数
  • template<class T> T negate<T> //取反仿函数
#include<functional>
#include<iostream>
using namespace std;

//negate
void test01(){
	negate<int> n;
	cout << n(50) << endl;
}

//plus
void test02(){
	plus<int> p;
	cout << p(10, 20) << endl;
}

int main() {
	test01();
	test02();

	system("pause");
	return 0;
}

总结:使用内建函数对象时,需要引入头文件 #include <functional>

关系仿函数

功能描述:

  • 实现关系对比

仿函数原型:

  • template<class T> bool equal_to<T>     //等于
  • template<class T> bool not_equal_to<T>  //不等于
  • template<class T> bool greater<T>           //大于
  • template<class T> bool greater_equal<T> //大于等于
  • template<class T> bool less<T>                  //小于
  • template<class T> bool less_equal<T>   //小于等于
#include<iostream>
#include<vector>
#include<functional>
#include<algorithm>
using namespace std;

class MyCompare {
public:
	bool operator()(int v1,int v2) {
		return v1 > v2;
	}
};

void test01() {
	vector<int>v;
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i);
	}

	//sort(v.begin(), v.end(), MyCompare());
	sort(v.begin(), v.end(), greater<int>());
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
		cout << *it << "  ";
	}
	cout << endl;

}


int main() {
	test01();

	system("pause");
	return 0;
}

我们用自己内置的大于仿函数原型。

总结:关系仿函数中最常用的就是greater<>大于。

逻辑仿函数

功能描述:

  • 实现逻辑运算

函数原型:

  • template<class T> bool logical_and<T> //逻辑与
  • template<class T> bool logical_or<T> //逻辑或
  • template<class T> bool logical_not<T> //逻辑非
#include<iostream>
#include<vector>
#include<functional>
#include<algorithm>
using namespace std;

void test01() {
	vector<bool> v;
	v.push_back(true);
	v.push_back(false);
	v.push_back(true);
	v.push_back(false);

	for (vector<bool>::iterator it = v.begin(); it != v.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;

	//逻辑非  将v容器搬运到v2中,并执行逻辑非运算
	vector<bool> v2;
	v2.resize(v.size());
	transform(v.begin(), v.end(), v2.begin(), logical_not<bool>());
	for (vector<bool>::iterator it = v2.begin(); it != v2.end(); it++){
		cout << *it << " ";
	}
	cout << endl;
}


int main() {
	test01();

	system("pause");
	return 0;
}

总结:逻辑仿函数实际应用较少,了解即可

 

发布了68 篇原创文章 · 获赞 141 · 访问量 29万+

猜你喜欢

转载自blog.csdn.net/cfl997/article/details/103275609