常用算法
-
算法主要是由头文件 <algorithm> <functional> <numeric> 组成。
-
<algorithm> 是所有 STL 头文件中最大的一个,范围涉及到比较、交换、查找、遍历操作、复制、修改等等
-
<nuneric> 体积很小,只包括几个在序列上面进行简单数学运算的模板函数
-
<functional>定义了一些模板类,用以声明函数对象。
1.遍历
- for_each(iterator beg,iterator end,_func); //遍历容器元素,beg开始迭代器,end结束迭代器,-func函数或函数对象
- transform(iterator beg1,iterator end1,iterator beg2,_func); //搬运容器到另一个容器中
1 //普通函数 2 void myprint01(int val) 3 { 4 cout << val << " "; 5 } 6 7 //仿函数 8 class myprint02 9 { 10 public: 11 void operator()(int val) 12 { 13 cout << val << " "; 14 } 15 }; 16 void test01() 17 { 18 vector<int> v; 19 for (int i = 1; i <= 10; i++) 20 { 21 v.push_back(i); 22 } 23 for_each(v.begin(), v.end(), myprint01); 24 for_each(v.begin(), v.end(), myprint02()); 25 }
2.查找
- find(iterator beg,iterator end,value); //查找元素value,找到返回指定位置迭代器,找不到返回结束迭代器位置
- find_if(iterator beg,iterator end,_Pred); //按条件查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置,_Pred函数或者谓词(返回bool类型的仿函数)
- adjacent_find(iterator beg,iterator end); //查找相邻重复元素,返回相邻元素的第一个位置的迭代器
- bool binary_search(iterator beg,iterator end,value); //二分查找法,,,!!!在无序序列中不可用
- count(iterator beg,iterator end,value); //统计元素个数
- count_if(iterator beg,iterator end,_Pred); //按条件统计元素个数,_Pred谓词;
3.排序
- sort(iterator beg,iterator end,_Pred); //对容器内元素进行排序
- random_shuffle(iterator beg,iterator end); //洗牌 指定范围内的元素随机调整次序
- merge(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest); //容器元素合并,并存储到另一容器中,dest目标容器开始迭代器
- reverse(iterator beg,iterator end); //反转指定范围的元素
4.拷贝和替换
- copy(iterator beg,iterator end,iterator dest); //容器内指定范围的元素拷贝到另一容器中
- replace(iterator beg,iterator end,oldvalue,newvalue); //将容器内指定范围的旧元素修改为新元素
- replace_if(iterator beg,iterator end,_Pred,newvalue); //容器内指定范围满足条件的元素替换为新元素
- swap(container c1,container c2); //互换两个容器的元素,c1 容器1;c2 容器2.(同种类型的容器)
5.算术生成算法
算术生成算法属于小型算法,使用时包含的头文件为 #include <numeric>
- accumulate(iterator beg,iterator end,value); //计算容器元素累计总和,valuue 起始值;
- fill(iterator beg,iterator end,value); //向容器中添加元素value
6.集合算法
- set_intersection(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest); //求两个容器的交集
- set_union(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest); //求两个容器的并集
- set_difference(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest); //求两个容器的差集