C++ STL常用算法
2021/5/11 22:25:12
本文主要是介绍C++ STL常用算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
算法主要头文件:
<algorithm> 体积最大,涉及比较,交换,查找,遍历操作,复制,修改等
<numeric> 体积小,简单数据运算模板函数
<functional> 定义模板类,声明函数对象
常用遍历算法
for_each( iterator beg,iterator end,_func ) //遍历容器
transform( iterator beg1,iterator end1,iterator beg2,_func ) //搬运容器到另一个容器中
#include<algorithm> #include<vector> class ToDo { public: int operator(int v) { return v; } } toDo(){} int main() { vector<int> v; for(int i=0;i<10;i+) v.push_back(i); //for_each遍历 for_each(v.begin(),v.end(),toDo); //for_each(v.begin(),v.end(),ToDo()); //ToDo为仿函数 //transform搬运 vector<int> vTarget; //目标容器 vTarget.resize(v.size()); //提前开辟空间 transform(v.begin(),v.end(),vTarget.begin); //transform(v.begin(),v.end(),vTarget.begin,ToDo()); //ToDo为仿函数(逻辑运算) system("pause"); return 0; }
常用查找算法
find( iterator beg,iterator end,value ) //查找元素(返回 迭代器)找到一个即停止
find_if( terator beg,iterator end,_Pred ) //按条件查找元素(返回 迭代器)找到一个即停止
adjacent_find( terator beg,iterator end ) //查找相邻重复元素(返回 [第一位置]迭代器)
binary_search(terator beg,iterator end,value ) //二分查找法 (仅有序序列,返回 bool)
count( terator beg,iterator end ) //统计某元素个数(返回 个数)
count_if( terator beg,iterator end,_Pred ) //按照条件统计元素个数
#include <vertor> #include <algorithm> class GreaterFive { public: bool operator(int val) { return val > 5; } } int main() { vertor<int> v; for(int i=0;i<10;i++) v.push_back(i); //find() vertor<int>:: it1 = find(v.begin,v.end(),5); if(it == v.end()){} //未找到 //find_if() vertor<int>:: it2 = find_if(v.begin,v.end(),GreaterFive()); //greater()内仿函数 if(it == v.end()){} //未找到 vertor<int> v1; v1.push_back(4); v1.push_back(1); v1.push_back(3); //返回位置 v1.push_back(3); v1.push_back(2); //adjacent_find() vertor<int>:: it3 = adjacent_find(v1.begin,v1.end()); if(it == v.end()){} //未找到 //binary_search bool flag = binary_search(v.begin,v.end(),5); //count int num1 = count(v1.begin,v1.end(),3); //count_if int num2 = count_if(v.begin,v.end(),GreaterFive()); system("pause"); return; }
常用排序算法
sort( terator beg,iterator end,_Pred ) //对容器内元素排序
random_shuffic( terator beg,iterator end ) //洗牌,范围里随机调整位置
merge(terator beg1,iterator end1 ,terator beg2,iterator end2 ,iterator dest) //容器元素合并,储存到另一容器(两容器必须有序)
reverse( terator beg,iterator end ) //反转指定范围的元素
#include <vertor> #include <algorithm> #include <functional> int main() { vertor<int> v,v2; for(int i=0;i<10;i++) v.push_back(i); for(int i=10;i<30;i++) v2.push_back(i); //sort sort(v.begin,v.end()); sort(v.begin,v.end(),greater<int>()); //降序 //random_shuffic random_shuffic(v.begin,v.end()); //merge vertor<int> newV; newV.resize(v.size()+v2.size()); //开辟空间 merge(v.begin,v.end(),v2.begin,v2.end(),newV.begin()) //reverse reverse(v.begin,v.end()); system("pause"); return 0; }
这篇关于C++ STL常用算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-05feign默认connecttimeout和readtimeout是多少-icode9专业技术文章分享
- 2024-07-05idea控制台,日志太多,导致部分想看得日志被刷走 搜不到-icode9专业技术文章分享
- 2024-07-05The server selected protocol version Tls10 is not accepted by client preferences [TLs12]-icode9专业技术文章分享
- 2024-07-05怎么清理项目缓存-icode9专业技术文章分享
- 2024-07-04安装 Eyoucms详细图文教程-icode9专业技术文章分享
- 2024-07-04ueditor 复制文章时,图片的链接是一个下载图片地址,该如何处理?-icode9专业技术文章分享
- 2024-07-04怎样判断host有没有对wordpress有缓存呢-icode9专业技术文章分享
- 2024-07-04具有编译功能的系统make后,无法ssh连接-icode9专业技术文章分享
- 2024-07-04make后如何升级ssh-icode9专业技术文章分享
- 2024-07-03微信支付提示下单账户与支付账户不一致-icode9专业技术文章分享