Arithmetic algorithm used to generate 4.7
/* accumulate algorithm calculates the cumulative sum container element @param beg vessel began iterator @param end container end iterator @param value the accumulated value */ accumulate(iterator beg, iterator end, value) /* fill algorithm add elements to a container @param beg vessel began iterator @param end container end iterator @param value t padding element */ fill(iterator beg, iterator end, value) |
Common arithmetic algorithm 19 generates
header numeric
the accumulate accumulated
filled with 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 common set of algorithms
/* set_intersection intersection algorithm for two set collection Note: The two sets must be ordered sequence @param beg1 container 1 start iterator @param end1 container 1 end iterator @param beg2 container 2 start iterator @param end2 container 2 end iterator @param dest target vessel began iterator @return an iterator address of the last element of the target container */ set_intersection(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest) /* set_union algorithm for two sets of set and set Note: The two sets must be ordered sequence @param beg1 container 1 start iterator @param end1 container 1 end iterator @param beg2 container 2 start iterator @param end2 container 2 end iterator @param dest target vessel began iterator @return an iterator address of the last element of the target container */ set_union(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest) /* set_difference Algorithm for the set difference of two sets of set Note: The two sets must be ordered sequence @param beg1 container 1 start iterator @param end1 container 1 end iterator @param beg2 container 2 start iterator @param end2 container 2 end iterator @param dest target vessel began iterator @return an iterator address of the last element of the target container */ set_difference(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest) |
20 common set of algorithms
intersection set_intersection
union set_union
difference set 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
*/
(This note organize content from network resources, invasion deleted)