4.7 常用算数生成算法
/* accumulate算法 计算容器元素累计总和 @param beg 容器开始迭代器 @param end 容器结束迭代器 @param value累加值 */ accumulate(iterator beg, iterator end, value) /* fill算法 向容器中添加元素 @param beg 容器开始迭代器 @param end 容器结束迭代器 @param value t填充元素 */ fill(iterator beg, iterator end, value) |
19 常用的算术生成算法
头文件 numeric
accumulate 累加
fill 填充
#include <iostream>
#include <algorithm>//不好使
#include <numeric>
#include <vector>
#include <iterator>
using namespace std;
/*
accumulate算法 计算容器元素累计总和
@param beg 容器开始迭代器
@param end 容器结束迭代器
@param value累加值
*/
//accumulate(iterator beg, iterator end, value)
void test01(){
vector<int>v;
for(int i=0;i<=100;i++){
v.push_back(i);
}
//0-100的累积和
int sum=accumulate(v.begin(),v.end(),0);//头文件num..
//第三个参数是起始累加值 改成1000 结果是6050
cout<<"sum:"<<sum<<endl;
}
/*
fill算法 向容器中添加元素
@param beg 容器开始迭代器
@param end 容器结束迭代器
@param value t填充元素
*/
//fill(iterator beg, iterator end, value)
void test02(){//在容器中添加一个元素
vector<int>v;
v.resize(10);//初始10个0
fill(v.begin(),v.end(),1000);
copy(v.begin(),v.end(),ostream_iterator<int>(cout," "));
}
int main(){
//test01();
test02();
return 0;
}
4.8 常用集合算法
/* set_intersection算法 求两个set集合的交集 注意:两个集合必须是有序序列 @param beg1 容器1开始迭代器 @param end1 容器1结束迭代器 @param beg2 容器2开始迭代器 @param end2 容器2结束迭代器 @param dest 目标容器开始迭代器 @return 目标容器的最后一个元素的迭代器地址 */ set_intersection(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest) /* set_union算法 求两个set集合的并集 注意:两个集合必须是有序序列 @param beg1 容器1开始迭代器 @param end1 容器1结束迭代器 @param beg2 容器2开始迭代器 @param end2 容器2结束迭代器 @param dest 目标容器开始迭代器 @return 目标容器的最后一个元素的迭代器地址 */ set_union(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest) /* set_difference算法 求两个set集合的差集 注意:两个集合必须是有序序列 @param beg1 容器1开始迭代器 @param end1 容器1结束迭代器 @param beg2 容器2开始迭代器 @param end2 容器2结束迭代器 @param dest 目标容器开始迭代器 @return 目标容器的最后一个元素的迭代器地址 */ set_difference(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest) |
20 常用的集合算法
交集 set_intersection
并集 set_union
差集 set_difference
#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>
using namespace std;
//交集
/*
set_intersection算法 求两个set集合的交集
注意:两个集合必须是有序序列
@param beg1 容器1开始迭代器
@param end1 容器1结束迭代器
@param beg2 容器2开始迭代器
@param end2 容器2结束迭代器
@param dest 目标容器开始迭代器
@return 目标容器的最后一个元素的迭代器地址
*/
//set_intersection(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest)
void test01(){
vector<int>v1;
vector<int>v2;
for(int i=0;i<10;i++){
v1.push_back(i);
v2.push_back(i+5);
}
vector<int> vTarget;
vTarget.resize(min(v1.size(),v2.size()));//返回两个中较小的数据
vector<int>::iterator itEnd=set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),vTarget.begin());
copy(vTarget.begin(),itEnd,ostream_iterator<int>(cout," "));
}
//并集
/*
set_union算法 求两个set集合的并集
注意:两个集合必须是有序序列
@param beg1 容器1开始迭代器
@param end1 容器1结束迭代器
@param beg2 容器2开始迭代器
@param end2 容器2结束迭代器
@param dest 目标容器开始迭代器
@return 目标容器的最后一个元素的迭代器地址
*/
//set_union(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest)
void test02(){
vector<int>v1;
vector<int>v2;
for(int i=0;i<10;i++){
v1.push_back(i);
v2.push_back(i+5);
}
vector<int> vTarget;
vTarget.resize(v1.size()+v2.size());//返回两个中较小的数据
vector<int>::iterator itEnd=set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),vTarget.begin());
copy(vTarget.begin(),itEnd,ostream_iterator<int>(cout," "));
// copy(vTarget.begin(),vTarget.end(),ostream_iterator<int>(cout," "));
//出现空位会补0 所以不能用vTarget.end() 作为最后一个地址
}
//差集
/*
set_difference算法 求两个set集合的差集
注意:两个集合必须是有序序列
@param beg1 容器1开始迭代器
@param end1 容器1结束迭代器
@param beg2 容器2开始迭代器
@param end2 容器2结束迭代器
@param dest 目标容器开始迭代器
@return 目标容器的最后一个元素的迭代器地址
*/
//set_difference(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest)
void test03(){
vector<int>v1;
vector<int>v2;
for(int i=0;i<10;i++){
v1.push_back(i);
v2.push_back(i+5);
}
vector<int> vTarget;
vTarget.resize(max(v1.size(),v2.size()));//返回两个中较小的数据
//v1 差 v2
vector<int>::iterator itEnd=set_difference(v1.begin(),v1.end(),v2.begin(),v2.end(),vTarget.begin());
copy(vTarget.begin(),itEnd,ostream_iterator<int>(cout," "));
cout<<endl;
//v2 差 v1
itEnd=set_difference(v2.begin(),v2.end(),v1.begin(),v1.end(),vTarget.begin());
copy(vTarget.begin(),itEnd,ostream_iterator<int>(cout," "));
}
int main(){
//test01();
// test02();
test03();
return 0;
}
/*
0 1 2 3 4 5 6 7 8 9
5 6 7 8 9 10 11 12 13 14
交集:5 6 7 8 9
并集: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
差集:A差B A和B中除了相同的交集以外A的部分
0 1 2 3 4
B差A 10 11 12 13 14
*/
(本笔记内容整理自网络资源,侵删)