STL算法之常用集合算法

2022-10-19  本文已影响0人  二进制人类

set_intersection

API

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

实例

 vector<int> v1;
    v1.push_back(1);
    v1.push_back(3);
    v1.push_back(5);
    v1.push_back(7);
    v1.push_back(9);
    vector<int> v2;
    v2.push_back(7);
    v2.push_back(9);
    v2.push_back(11);
    v2.push_back(13);
    v2.push_back(17);
    vector<int> v3;
    v3.resize( min(v1.size(), v2.size()));
    //函数的返回值 是v3有效的结束位置
    vector<int>::iterator ret;
    ret = set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(), v3.begin());
    copy(v3.begin(),ret, ostream_iterator<int>(cout," "));//7 9
    cout<<endl;

set_union

API

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

实例

#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
using  namespace std;
int main() {
    vector<int> v1;
    v1.push_back(1);
    v1.push_back(3);
    v1.push_back(5);
    v1.push_back(7);
    v1.push_back(9);

    vector<int> v2;
    v2.push_back(7);
    v2.push_back(9);
    v2.push_back(11);
    v2.push_back(13);
    v2.push_back(17);
    vector<int> v3;
    v3.resize( v1.size()+v2.size());
    //函数的返回值 是v3有效的结束位置
    vector<int>::iterator ret;
    ret = set_union(v1.begin(),v1.end(),v2.begin(),v2.end(), v3.begin());
    copy(v3.begin(),ret, ostream_iterator<int>(cout," "));//1 3 5 7 9 11 13 17
    cout<<endl;
    return 0;
}

set_difference

API

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

实例

#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
using  namespace std;
int main() {

    vector<int> v1;
    v1.push_back(1);
    v1.push_back(3);
    v1.push_back(5);
    v1.push_back(7);
    v1.push_back(9);

    vector<int> v2;
    v2.push_back(7);
    v2.push_back(9);
    v2.push_back(11);
    v2.push_back(13);
    v2.push_back(17);

    vector<int> v3;
    v3.resize( v1.size());

    //函数的返回值 是v3有效的结束位置
    vector<int>::iterator ret;
    ret = set_difference(v1.begin(),v1.end(),v2.begin(),v2.end(), v3.begin());

    copy(v3.begin(),ret, ostream_iterator<int>(cout," "));//1 3 5
    cout<<endl;
    return 0;
}

上一篇 下一篇

猜你喜欢

热点阅读