STL常用算法

Posted 比特组合

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL常用算法相关的知识,希望对你有一定的参考价值。


概述
  • 算法主要是由头文件<algorithm><functional><numeric>组成

  • <algorithm>是所有STL头文件中最大的一个,范围涉及到比较、查找、交换、遍历、复制、修改

  • <numberic>体积很小,只包括几个在序列上面进行简单数学运算的模板函数

  • <functional>定义了一些模板类,用以声明函数对象

  • for_each

    for_each(iterator beg,iterator end,_func);//遍历容器元素//beg 开始迭代器//end 结束迭代器//_func 函数或函数对象
  • transform

    transform(iterator beg1,iterator end2,iterator beg2,_func);//beg1 源容器开始迭代器//end1 源容器结束迭代器//beg2 目标容器开hi迭代器//_func 函数或者函数对象(仿函数)//transform过程中可以使用_func对数据处理后,到目标容器vector<int>vTarget;vTarget.resize(v.size);//先给出空间大小,否则没有容量transform(v.begin().v.end(),vTarget.begin(),TransFrom());//将v.begin-v.end()区间的元素搬运到vTarget容器,TransForm()可以对源数据进行处理,加减乘除等

查找算法

find;//查找元素find_if;//按条件查找元素adjacent_find;//查找相邻重复元素binary_search;//二分查找法count;//统计元素个数count_if;//按照条件统计元素个数


#include <algorithm>find(iterator beg,iterator end,value);//找到返回指定元素的迭代器,找不到返回结束迭代器end(),查找自定义的数据类型,重载==find_if(iterator beg,iterator end,_Pred);//按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器//beg 开始迭代器//end 结束迭代器//_Pred 函数或者谓词(返回bool类型)//按照_Pred函数的规则,在beg-end区间查找adjacent_find(iterator beg,iterator end);//查找相邻重复元素,返回相邻与元素的第一个位置的迭代器,没有找到返回结束迭代器//beg开始迭代器//end结束迭代器bool binary_search(iterator beg,iterator end,value);//查找指定的元素,查找返回true,否则false//注意:在无序序列中不可用,使用的二分查找法//beg开始迭代器//end 结束迭代器//value查找的元素int count(iterator beg,iterator end,value);//统计元素出现的次数//beg 开始迭代器//end 结束迭代器//value 统计的元素int count_if(iterator beg,iterator end,_Pred);//按条件统计元素出现的次数//beg开始迭代器//end 结束迭代器//_Pred 谓词

排序算法

sort;//对容器内元素进行排序rangdom_shuffle;//指定范围内的元素随机调整次序merge;//容器元素合并,并存储到另一个容器中reverse;//反转指定范围的元素


sort(iterator beg,iterator end,_Pred);//默认升序,改变顺序填写_Predrandom_shuffle(iterator beg,iterator end);//指定范围内的元素随机调整次序//beg 开始迭代器//end 结束迭代器merge(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest);//beg1 容器1开始迭代器//end1 容器1结束迭代器//beg2 容器2开始迭代器//end2 容器2结束迭代器//dest 目标容器开始迭代器//两个容器必须是有序的,合并完后仍然有序reverse(beg,end);//将区间的元素首尾对调1234->4321
常用拷贝和替换方法
copy(iterator begin1,iterator end1,iterator begin2);//容器内指定范围的元素拷贝到另一容器中replace(iterator beg,iterator end,oladvalue,newvalue);//将容器内指定范围的旧元素修改为新元素replace_if(iterator beg,iterator end,_pred,newvalue);//容器内指定范围满足_pred条件的元素替换为新元素swap(container c1,container c2);//互换两个容器的元素


常用算术生成算法
#include<numeric>accumulate(iterator beg,iterator end,value);//计算容器元素累计总和,value起始累加值fill(iterator beg,iterator end,value);//向容器中填充元素
常用集合算法
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);//求补集,两个集合必须是有序序列,返回目标容器的最后一个元素的迭代器地址





以上是关于STL常用算法的主要内容,如果未能解决你的问题,请参考以下文章

[C++STL]常用遍历算法

比给定值最小的最大元素的 STL 算法

[C++STL]常用排序算法

[C++STL]常用查找算法

[C++STL]常用算术生成算法

[C++STL]常用拷贝和替换算法