常用STL算法6_集合

9 篇文章 0 订阅
#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <vector>
#include <set>
#include <list>
#include <algorithm>
#include <functional>
#include <numeric>
#include <string>
#include <iterator> //输出流
using namespace std;

template <typename T>
void printElem(T &t)
{
    T::iterator it;
    for (it = t.begin(); it != t.end(); it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
}
void main1101()
{
    vector<int> vecIntA;
    vecIntA.push_back(1);
    vecIntA.push_back(3);
    vecIntA.push_back(5);
    vecIntA.push_back(7);
    vecIntA.push_back(9);

    vector<int> vecIntB;
    vecIntB.push_back(1);
    vecIntB.push_back(3);
    vecIntB.push_back(5);
    vecIntB.push_back(6);
    vecIntB.push_back(8);

    vector<int> vecIntC;
    vecIntC.resize(vecIntA.size() + vecIntB.size());

    //并集
    /*
    _OutIt set_union(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest)
    {   
        // OR sets [_First1, _Last1) and [_First2, _Last2), using operator<
        _DEBUG_ORDER(_First1, _Last1);
        _DEBUG_ORDER(_First2, _Last2);
        _DEBUG_POINTER(_Dest);
        return (_Set_union1(_Unchecked(_First1), _Unchecked(_Last1),
                            _Unchecked(_First2), _Unchecked(_Last2),
                            _Dest, _Is_checked(_Dest)));
    }
    */
    set_union(vecIntA.begin(), vecIntA.end(), vecIntB.begin(), vecIntB.end(), vecIntC.begin());     
    //vecIntC : {1,3,5,6,7,8,9,0,0,0}
    cout<<"set_union并集:"<<endl;
    printElem(vecIntC);

    //交集
    /*
    _OutIt set_intersection(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest)
    {   
        // AND sets [_First1, _Last1) and [_First2, _Last2), using operator<
        _DEBUG_ORDER(_First1, _Last1);
        _DEBUG_ORDER(_First2, _Last2);
        _DEBUG_POINTER(_Dest);
        return (_Set_intersection1(_Unchecked(_First1), _Unchecked(_Last1),
                _Unchecked(_First2), _Unchecked(_Last2),
                _Dest, _Is_checked(_Dest)));
    }
    */
    fill(vecIntC.begin(),vecIntC.end(),0);
    set_intersection(vecIntA.begin(), vecIntA.end(), vecIntB.begin(), vecIntB.end(), vecIntC.begin());      
    //vecIntC: {1,3,5,0,0,0,0,0,0,0}
    cout<<"set_union交集:"<<endl;
    printElem(vecIntC);

    //差集
    /*
    _OutIt set_difference(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest)
    {   
        // take set [_First2, _Last2) from [_First1, _Last1), using operator<
        _DEBUG_ORDER(_First1, _Last1);
        _DEBUG_ORDER(_First2, _Last2);
        _DEBUG_POINTER(_Dest);
        return (_Set_difference1(_Unchecked(_First1), _Unchecked(_Last1),
                _Unchecked(_First2), _Unchecked(_Last2),
                _Dest, _Is_checked(_Dest)));
    }
    */
    fill(vecIntC.begin(),vecIntC.end(),0);
    set_difference(vecIntA.begin(), vecIntA.end(), vecIntB.begin(), vecIntB.end(), vecIntC.begin());        
    //vecIntC: {7,9,0,0,0,0,0,0,0,0}
    cout<<"set_union差集:"<<endl;
    printElem(vecIntC);


}

/*
1. 并集 set_union:  构造一个有序序列,包含两个有序序列的并集。
2. 交集 set_intersection:  构造一个有序序列,包含两个有序序列的交集。
3. 差集 set_difference:  构造一个有序序列,该序列保留第一个有序序列中存在而第二个有序序列中不存在的元素。
*/

int main()
{
    main1101();

    cout<<"\nhello"<<endl;
    system("pause");
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值