<十>泛型算法和绑定器
泛型算法
头文件
泛型算法=》template + 迭代器 + 函数对象
sort, find , find_if , binary_search , for_each
泛型算法特点
1:泛型算法的参数接收的都是迭代器(迭代器保证了接口统一)
2:泛型算法的参数还可以接收函数对象
int arr[]={12,34,11,23,56,33,6,88};
vector<int> vec(arr,arr+sizeof(arr)/sizeof(arr[0]));
for(int v : vec){
cout<< v <<" ";
}
cout<<endl;
sor(vec,vec.begin(),vec.end(),greater<int>());//排序 默认是less<T>()
//排序后,如果要查找,用二分查找,时间快 log2(N)
auto it1=binary_search(vec.begin(),vec.end(),21); //log2(N)
//find的效率没有binary_search效率高
auto it2=find(vec.begin(),vec.end(),21);
if(it2!=vec.end){
cout<<"找到了"<<endl;
}
//find_if需要的是1元函数对象,C++库提供的是二元函数对象
//所以就需要绑定器bind1st 绑定第一个参数,bind2st绑定第2个参数
//bind1st bind2st + 二元函数对象=>一元函数对象
//找到第一个小于20的元素位置
auto it3=find_if(vec.begin(),vec.end(),bind2st(less<int>(),20));
if(it3!=vec.end()){
cout<<"找到了"<<endl;
}
//也可以用lamda表达式
auto it4=find_if(vec.begin(),vec.end(),[](int val)->bool{reutrn val<20});
if(it4!=vec.end()){
cout<<"找到了"<<endl;
}
//for_each可以遍历容器的所有元素,可以自行添加合适的函数对象对容器进行过滤
//泛型可以避免多写一个只用一次的函数对象,精简项目混乱
for_each(vec.begin(),vec.end();[](int val)->void{
if(val%2==0){
cout<<val<<endl;
}
})
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)