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;//按照条件统计元素个数
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);//默认升序,改变顺序填写_Pred
random_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常用算法的主要内容,如果未能解决你的问题,请参考以下文章