C++进阶STL-常用集合算法

我就是我 2022-05-06 02:30 360阅读 0赞

交集

  • OutputIterator set_intersection (
    InputIterator1 first1, InputIterator1 last1,
    InputIterator2 first2, InputIterator2 last2,
    OutputIterator result)
  • 返回值是交集最后一个元素的下个元素的迭代器

例子:

  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <algorithm>
  4. #include <vector>
  5. #include <time.h>
  6. #include <numeric>
  7. using namespace std;
  8. void Print(int n)
  9. {
  10. cout << " " << n;
  11. }
  12. int main()
  13. {
  14. vector<int> v1;
  15. for (int i = 0; i < 10; i++)
  16. {
  17. v1.push_back(i);
  18. }
  19. cout << "v1 : ";
  20. for_each(v1.begin(),v1.end(), Print); cout << endl;
  21. vector<int> v2;
  22. for (int i = 5; i < 20; i++)
  23. {
  24. v2.push_back(i);
  25. }
  26. cout << "v2 : ";
  27. for_each(v2.begin(), v2.end(), Print); cout << endl;![在这里插入图片描述](https://img-blog.csdn.net/20181012162344674?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p6eWN6enlj/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
  28. vector<int> v3;
  29. v3.resize(min(v1.size(), v2.size()));
  30. vector<int>::iterator it=set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin());
  31. cout << "交集v3 : ";
  32. for_each(v3.begin(), it, Print); cout << endl;
  33. return 0;
  34. }

结果:
在这里插入图片描述


并集

  • OutputIterator set_union (
    InputIterator1 first1, InputIterator1 last1,
    InputIterator2 first2, InputIterator2 last2,
    OutputIterator result )
  • 返回值:并集最后一个元素的  下一个元素的迭代器

    include “stdafx.h”

    include

    include

    include

    include

    include

    using namespace std;

  1. void Print(int n)
  2. {
  3. cout << " " << n;
  4. }
  5. int main()
  6. {
  7. vector<int> v1;
  8. for (int i = 0; i < 7; i++)
  9. {
  10. v1.push_back(i);
  11. }
  12. cout << "v1 : ";
  13. for_each(v1.begin(),v1.end(), Print); cout << endl;
  14. vector<int> v2;
  15. for (int i = 5; i < 10; i++)
  16. {
  17. v2.push_back(i);
  18. }
  19. cout << "v2 : ";
  20. for_each(v2.begin(), v2.end(), Print); cout << endl;
  21. vector<int> v3;
  22. v3.resize(v1.size()+v2.size());
  23. vector<int>::iterator it=set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin());
  24. cout << "交集v3 : ";
  25. for_each(v3.begin(), it, Print); cout << endl;
  26. return 0;
  27. }

结果:
在这里插入图片描述


差集:v1-(v1和v2的交集)

  • OutputIterator set_difference (
    InputIterator1 first1, InputIterator1 last1,
    InputIterator2 first2, InputIterator2 last2,
    OutputIterator result)
  • 返回值:差集最后一个元素的   下一个元素的迭代器

    include “stdafx.h”

    include

    include

    include

    include

    include

    using namespace std;

  1. void Print(int n)
  2. {
  3. cout << " " << n;
  4. }
  5. int main()
  6. {
  7. vector<int> v1;
  8. for (int i = 0; i < 7; i++)
  9. {
  10. v1.push_back(i);
  11. }
  12. cout << "v1 : ";
  13. for_each(v1.begin(),v1.end(), Print); cout << endl;
  14. vector<int> v2;
  15. for (int i = 5; i < 10; i++)
  16. {
  17. v2.push_back(i);
  18. }
  19. cout << "v2 : ";
  20. for_each(v2.begin(), v2.end(), Print); cout << endl;
  21. vector<int> v3;
  22. v3.resize(v1.size());
  23. vector<int>::iterator it= set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin());
  24. cout << "差集 v3 : ";
  25. for_each(v3.begin(), it, Print); cout << endl;
  26. return 0;
  27. }

结果:
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,360人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C++STL-模板

    模板的机制 模板并不是能处理任何类型的数据,只是它根据传入参数的类型的不同生成了不同的 函数/类 体(我们在不使用函数模板的正常操作,只不过编译器帮我们做了)。在此编译过