算法主要头文件:
<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; }