泛型算法(二十二)之集合操作算法

1、includes(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2):判断第2个已为升序的序列的元素是否都出现在第1个升序序列中。

    std::vector<int> c1 = {1, 2, 3, 4};
    std::vector<int> c2 = {1, 2, 3};

    bool i = std::includes(c1.begin(), c1.end(), c2.begin(), c2.end());

    std::cout << (int)i;
    //打印结果:1

2、includes(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, Compare comp):重载版本,用给定谓词pred代替operator<。

自己实现comp,向算法定制操作。

3、set_difference(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result):两个升序序列之差。

    std::vector<int> c1 = {1, 2, 3, 4};
    std::vector<int> c2 = {1, 2, 3};
    std::vector<int> result;
    result.resize(1);

    std::set_difference(c1.begin(), c1.end(), c2.begin(), c2.end(), result.begin());

    for (auto var : result)
    {
        std::cout << var << ",";
    }
    //打印结果:4

4、set_difference(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp):重载版本。

自己实现comp,向算法定制操作。

5、set_intersection(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result):两个升序序列(集合)的交

    std::vector<int> c1 = {1, 2, 3, 4};
    std::vector<int> c2 = {1, 2, 3};
    std::vector<int> result;
    result.resize(3);

    std::set_intersection(c1.begin(), c1.end(), c2.begin(), c2.end(), result.begin());

    for (auto var : result)
    {
        std::cout << var << ",";
    }
    //打印结果:1,2,3,

6、set_intersection(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp):重载版本。

自己实现comp,向算法定制操作。

7、set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result):两个升序序列的对称差。

    std::vector<int> c1 = {1, 2, 3, 4};
    std::vector<int> c2 = {1, 2, 3, 5};
    std::vector<int> result;
    result.resize(2);

    std::set_symmetric_difference(c1.begin(), c1.end(), c2.begin(), c2.end(), result.begin());

    for (auto var : result)
    {
        std::cout << var << ",";
    }
    //打印结果:4,5,

8、set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp):重载版本。

自己实现comp,向算法定制操作。

9、set_union(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result):两个升序序列的并。

    std::vector<int> c1 = {1, 2, 3, 4};
    std::vector<int> c2 = {1, 2, 3, 5};
    std::vector<int> result;
    result.resize(5);
    //求两个集合的并集
    std::set_union(c1.begin(), c1.end(), c2.begin(), c2.end(), result.begin());

    for (auto var : result)
    {
        std::cout << var << ",";
    }
    //打印结果:1,2,3,4,5,

10、set_union(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp):重载版本。

自己实现comp,向算法定制操作。

原文地址:https://www.cnblogs.com/dongerlei/p/5147497.html