一、适配器
适配器可以理解为接口转换器。添加头文件:
#include <functional>
(一)函数适配器
1. 绑定器
【功能:】
绑定参数将二元函数转换成一元函数对象。
【分类:】
- bind1st:将二元函数对象的第一个参数绑定。
- bind2nd:将二元函数对象的第二个参数绑定。
【实例:】
函数对象greater,函数重载()实现了大于的逻辑,需要传入2个参数left,right,是二元函数对象,逻辑如下:
bool operator()(int left,int right)
{
return (left>right);
}
【1. 在容器vector中查找小于10的数:】
使用find_if查找,第三个参数使用函数对象greater,需要传入两个参数,但是现在给定了一个参数10,那么要找到比10小的数,则left为10,right为容器元素,循环比较。需要将二元函数对象变为一元函数对象,此时left确定,所以绑定第一个参数即可,如下图所示:
那么代码如下:
int main()
{
int arr[]={
5,3,23,54,7,9};
int len=sizeof(arr)/sizeof(arr[0]);
std::vector<int>vec(arr,arr+len);
std::vector<int>::iterator fit=std::find_if(vec.begin(),vec.end(),std::bind1st(std::greater<int>(),10));
if(fit!=vec.end())
{
std::cout<<"vec find : "<<*fit<<std::endl;
}
else
{
std::cout<<"vec no exist"<<std::endl;
}
}
【2. 在容器中查找大于10的数】
同理,我们绑定第二个参数,那么right=10,left为容器的数值,循环比较left>right,找到大于10的数。代码如下:
# include<iostream>
# include<deque>
# include<vector>
# include<list>
#