C++ 笔记 23 (STL常用算法 - 算术生成 & 集合)

五. 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返回值是差集中最后一个元素的位置

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值