STL算法之集合

集合

图解:

交集

set_intersection(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest)

  •     set_intersection算法 求两个set集合的交集
  •     注意:两个集合必须是有序序列
  •     @param beg1 容器1开始迭代器
  •     @param end1 容器1结束迭代器
  •     @param beg2 容器2开始迭代器
  •     @param end2 容器2结束迭代器
  •     @param dest  目标容器开始迭代器
  •     @return 目标容器的最后一个元素的迭代器地址
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> vTar;   //目标容器
    vTar.resize(min(v1.size(), v2.size())); //取交集中空间大小较小的 
    vector<int>::iterator itEnd = set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), vTar.begin()); //交集 返回末尾迭代器 即 最后一个交集数据
                                                                                                            //如:5 6 7 8 9 0 0 0 0 0 交集只到9 itEnd返回的就是9的下一个位置,即 0
    cout << *(itEnd-1) << endl; //9

    copy(vTar.begin(), itEnd, ostream_iterator<int>(cout, " "));
}

结果:

并集

set_union(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 目标容器的最后一个元素的迭代器地址
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> vTar;   //目标容器
    vTar.resize( v1.size() + v2.size()); //取交集中空间大小较小的 
    vector<int>::iterator itEnd = set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), vTar.begin()); //并集 返回末尾迭代器 即 最后一个并集数据
    cout << *(itEnd - 1) << endl; //14

    copy(vTar.begin(), itEnd, ostream_iterator<int>(cout, " "));
}

结果:

差集

set_difference(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 目标容器的最后一个元素的迭代器地址

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> vTar;   //目标容器
    vTar.resize(max(v1.size(),v2.size())); //取差集中空间大小较大的 
    vector<int>::iterator itEnd = set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), vTar.begin()); //v1 差 v2
    cout << *(itEnd - 1) << endl; //14
    copy(vTar.begin(), itEnd, ostream_iterator<int>(cout, " "));
    cout << endl;

    itEnd = set_difference(v2.begin(), v2.end(), v1.begin(), v1.end(), vTar.begin()); //v2 差 v1
    cout << *(itEnd - 1) << endl; //14
    copy(vTar.begin(), itEnd, ostream_iterator<int>(cout, " "));
    cout << endl;
}

结果:

原文地址:https://www.cnblogs.com/yifengs/p/15235888.html