• 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;
    }

    结果:

  • 相关阅读:
    Python接口测试
    Python数据类型间互转(字典、字符串、列表、元组)
    Jenkins自动构建部署(Maven+SVN+Tomcat7))
    Hadoop搭建HA环境(Hadoop+HBase+Zookeeper)注意事项
    CentOS中安装使用ssh
    CentOS中设置网络
    CentOS中永久修改主机名
    jsp页面动态的显示当前系统的时间
    css样式解决不同IE版本之间的兼容问题
    java.lang.NoClassDefFoundError: org/apache/jsp/licence_jsp (wrong name: org/apache/jsp/Licence_jsp)
  • 原文地址:https://www.cnblogs.com/yifengs/p/15235888.html
Copyright © 2020-2023  润新知