五. STL-常用算法
5. 常用算术生成算法
算术生成算法属于小型算法,使用时包含的头文件为 :
#include < numeric >
accumulate //计算容器元素累计总和
fill //向容器中添加元素
5.1 accumulate
功能:计算区间内容器元素累计总和
原型:
accumulate(iterator beg ,iterator end ,value);
//其中value是起始值
int total = accumlate (v.begin(),v.end(),0);
总结:accumulate 使用时头文件是numeric,这个算法很使用
5.2 fill
功能:向容器中填充指定的元素
原型:
fill (iterator beg , iterator end , value);
//其中value是填充的值
fill(v.begin(), v.end(),100);
总结:利用fill可以将容器区间内元素填充为指定的值
6. 常用集合算法
set_intersection //求两个容器的交集
set_union //求两个容器的并集
set_difference //求两个容器的差集
6.1 set_intersection
功能:求两个容器的交集
原型:
set_intersection(iterator beg1, iterator end1, iterator beg2,
iterator end2, iterator dest);
//两个集合必须是有序序列,其中iterator dest是目标容器开始迭代器
示例:
//取两个里面较小的值给目标容器开辟空间
vTarget.resize(min(v1.size(),v2.size()));
//返回目标容器的最后一个元素的迭代器地址
vector<int>::iterator itEnd = set_intersection(v1.begin(),v1.end()),v2.begin(),v2.end(),
vTarget.begin());
总结:
1)求交集的两个集合必须是有序序列;
2)目标容器开辟空间需要从两个容器中取最小值
3)set_intersecton返回值是交集中最后一个元素的位置
6.2 set_union
功能:求两个集合的并集
原型:
set_union(iterator beg1, iterator end1, iterator beg2,
iterator end2, iterator dest);
//两个集合必须是有序序列
//取两个容器的和给目标容器开辟空间
vTarget.resize(v1.size() + v2.size());
//返回目标容器的最后一个元素的迭代器地址
vector<int>::iterator itEnd = set_union(v1.begin(),v1.end()),v2.begin(),v2.end(),
vTarget.begin());
总结:
1)求并集的两个集合必须是有序序列;
2)目标容器开辟空间需要两个容器相加
3)set_union返回值是并集中最后一个元素的位置
6.3 set_difference
功能:求两个集合的差集
原型:
set_difference(iterator beg1, iterator end1, iterator beg2,
iterator end2, iterator dest);
//两个集合必须是有序序列
//取两个里面较大的值给目标容器开辟空间
vTarget.resize(max(v1.size(),v2.size()));
//返回目标容器的最后一个元素的迭代器地址
vector<int>::iterator itEnd = set_union(v1.begin(),v1.end()),v2.begin(),v2.end(),
vTarget.begin());
总结:
1)求差集的两个集合必须是有序序列;
2)目标容器开辟空间需要从两个容器中取较大值
3)set_difference返回值是差集中最后一个元素的位置