重载函数调用操作符的类,其对象称为函数对象,使用重载的()时,行为类似函数调用,也叫仿函数。 函数对象(仿函数)的本质是一个类,不是一个函数。
谓词(Pred)
返回bool类型的仿函数称为谓词,operator()接受一个参数叫做一元谓词,两个叫做二元谓词。
#include <iostream>
#include <string>
#include <ctime>
#include <map>
#include <algorithm>
#include <vector>
using namespace std;
//一元谓词和二元谓词实例
class greaterfive {
public:
bool operator()(int val) {
return val > 5;
}
};
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);
}
vector<int>::iterator it = find_if(v.begin(), v.end(), greaterfive());
/*if (it == v.end()) {
cout << "not found" << endl;
}
else {
cout << "found:" << *it << endl;
}*/
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
cout << *it << " ";
}
sort(v.begin(), v.end(), MyCompare());
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
cout << *it << " ";
}
}
int main() {
test01();
return 0;
}
内建函数对象
1.算术仿函数 2.关系仿函数 3. 逻辑仿函数
使用内建函数对象需要#include<functional>
算术仿函数:
关系仿函数(greater最常用):
逻辑仿函数:
常用遍历算法
for_each(遍历):
transform(将一个容器搬到另外一个容器):
注:目标容器需要提前开辟空间。 v_target.resize(v.size());
常用查找算法
二分查找需要在有序序列中使用。
常用排序算法
merge中的两个容器必需有序,合并完之后依然有序。
常用拷贝和替换算法、
常用算术生成算法
常用集合算术生成算法
目标容器需要提前开辟空间。