The STL (usual arithmetic generation, collection algorithm)

Disclaimer: This article is a blogger original article, follow the CC 4.0 BY-SA copyright agreement, reproduced, please attach the original source link and this statement.
This link: https://blog.csdn.net/qq_42754132/article/details/100063993

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)

Guess you like

Origin blog.csdn.net/qq_42754132/article/details/100063993