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

    结果:

  • 相关阅读:
    LeetCode Binary Tree Inorder Traversal
    LeetCode Populating Next Right Pointers in Each Node
    LeetCode Construct Binary Tree from Inorder and Postorder Traversal
    LeetCode Reverse Linked List II
    LeetCode Populating Next Right Pointers in Each Node II
    LeetCode Pascal's Triangle
    Palindrome Construct Binary Tree from Preorder and Inorder Traversal
    Pascal's Triangle II
    LeetCode Word Ladder
    LeetCode Binary Tree Zigzag Level Order Traversal
  • 原文地址:https://www.cnblogs.com/yifengs/p/15235888.html
Copyright © 2020-2023  润新知