文章目录
- 一、谓词
- 二、标准算法`algorithm`
- 1、`sort` 排序算法
- 第一种sort重载
- 第二种sort重载
- 2、`find_if` 查找算法
一、谓词
概念:
●返回bool
类型的仿函数称为谓词
●如果operator()
接受一个参数,那么叫做一元谓词
_InIt find_if(_InIt _First, const _InIt _Last, _Pr _Pred)
_InIt _First:为要查找区间的初始位置。const _InIt _Last:为要查找区间的结束位置。_Pr _Pred:为一元谓词,也称仿函数。
●如果operator()
接受两个参数,那么叫做二元谓词
例如
void sort(const _RanIt _First, const _RanIt _Last, _Pr _Pred)
最后
_Pr _Pred 为二元谓词,需要两个参数比较大小
二、标准算法algorithm
1、sort
排序算法
函数原型分为两种
第一种sort重载
●void sort(const _RanIt _First, const _RanIt _Last)
两个参数为要排序的区间
第二种sort重载
●void sort(const _RanIt _First, const _RanIt _Last, _Pr _Pred)
最后 _Pr _Pred 为谓词,也是仿函数
class compare
{
public:bool operator()(int v1, int v2){return v1 > v2;}
};void test01()
{vector<int> v;v.push_back(20);v.push_back(10);v.push_back(50);v.push_back(23);v.push_back(40);v.push_back(18);cout << "------- 排序前 -------" << endl;printVector(v);//遍历容器sort(v.begin(), v.end(), compare());cout << "------- 排序后 -------" << endl;printVector(v);//遍历容器
}
2、find_if
查找算法
函数原型
●_InIt find_if(_InIt _First, const _InIt _Last, _Pr _Pred)
_InIt _First:为要查找区间的初始位置。const _InIt _Last:为要查找区间的结束位置。_Pr _Pred:为一元谓词,也称仿函数。
class Find
{
public:bool operator()(int val){return val == 5;}
};void test02()
{vector<int> v;v.push_back(20);v.push_back(10);v.push_back(50);v.push_back(23);v.push_back(5);v.push_back(18);vector<int>::iterator it = find_if(v.begin(), v.end(), Find());if (it != v.end()){cout << "查找成功" << " " << *it << endl;}else{cout << "查找失败" << endl;}
}