#include<algorithm>
遍历算法
for_each
for_each(iterator beg,iterator end,_func);
//func为函数对象或者函数
transform
搬运容器到另一个容器中
transform(iterator beg1, iterator end1, iterator beg2, _func);
例如: transform(v.begin(), v.end(), vTarget.begin(), TransForm());
查找算法
find
find(iterator beg,iterator end,value);
//按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器
find_if
按条件查找元素
find_if(iterator beg, iterator end, _Pred);
//_Pred 为函数或者谓词
//返回指定迭代器位置
adjacent_find
查找相邻重复元素
adjacent_find(iterator beg,iterator end);
//查找相邻重复元素,返回相邻元素的第一个位置的迭代器 —— beg开始迭代器,end结束迭代器
binary_search
查找指定元素是否存在,内部使用二分查找,必须针对有序序列,若是自定义类型,需要在类里面重载<或者是定义比较函数
count
统计元素个数,按值统计
count(iterator beg,iterator end,value);
count_if
按条件统计元素个数
count_if(iterator beg, iterator end, _Pred);
//_Pred谓词
排序算法
sort
sort(iterator beg,iterator end,_Pred);
//谓词
random_shuffle
洗牌,随机调整次序
random_shuffle(iterator beg,iterator end);
记得调用随机数种子,如果要重复使用的话
srand((unsigned int)time(NULL));
merge
两个容器元素合并,并存储到另一个容器中
merge(iterator beg1,iteratore end1,iterator beg2,iterator end2,iterator dest);
//将容器1和容器2存储到目标容器中
//merge合并两个容器必须是有序的序列
reverse
对容器内元素进行反转
reverse(iterator beg, iterator end);
常见拷贝和替换算法
copy
copy(iterator beg,iterator end,iterator dest);
//注意,copy不会负责处理动态分配内存的分配和释放,即浅拷贝
//同时目标容器得提前开辟空间
replace
将区间内的旧元素替换为新元素
replace(iterator beg,iterator end,oldvalue,newvalue);
//把区间内旧元素替换为新元素
replace_if
将区间内满足条件的元素替换为指定元素
replace_if(iterator beg,iterator end,_pred,newvalue);
//_pred谓词
swap
互换两个容器的元素,需要是同种类型的容器。
swap(container c1, container c2);
算数生成算法
包含的头文件为 #include<numeric>
accumulate
计算区间内容器元素累计总和
accumulate(iterator beg,iterator end,value);
//beg开始迭代器,end结束迭代器,value起始值
例如:int total = accumulate(v.begin(), v.end(), 0);
fill
向容器中填充指定元素
fill(iterator beg,iterator end,value);
//value为填充的值
常用集合算法
set_intersection
求两个容器的交集——必须是有序序列
set_intersection(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest);
dest为目标容器开始迭代器
目标容器开辟空间需从两个容器中取小值
set_union
求两个容器的并集——必须是有序序列
set_union(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest);
dest为目标容器开始迭代器
目标容器开辟空间需要为两个容器相加
set_difference
求两个集合的差集
set_difference(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);
两个集合必须是有序序列
有返回值,为差集中最后一个元素的位置。,方便锁定到有效部分