STL(常用算术生成,集合算法)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_42754132/article/details/100063993

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
 */


(本笔记内容整理自网络资源,侵删)

猜你喜欢

转载自blog.csdn.net/qq_42754132/article/details/100063993