【STL使用笔记】set_union,set_difference,set_intersection使用需要注意的细节

对于内置数据类型的使用(如int)
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

 class PrintInt
 {
 public:
     void operator()(int val)
     {
         cout << val << ' ';
     }
 };

int main()
{
	  vector<int>v1, v2;
      for(int i = 0; i <= 10; ++i)
      {
          v1.push_back(i);
          v2.push_back(i + 5);
      }
      vector<int>vTarget;
      vTarget.resize(min(v1.size(), v2.size()));//使用该方法之前需要手动开辟目标容器的大小,否则会报错
      vector<int>::iterator itEnd = set_intersection(v1.begin(), v1.end(), v2.begin(), v2. end(), vTarget.begin());//利用返回的迭代器位置来确定最后一个数据的位置
      for_each(vTarget.begin(), itEnd, PrintInt());
      cout << endl;
	return 0;
}

该方法是利用模板返回的迭代器位置来确定最后一个元素的位置。如果是自定义类型使用这种方法则会产生一连串的错误!

对于自定义数据类型
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

 class stu
 {
 public:
     stu(string _name, int _num)
     {
         this->name = _name;
         this->num = _num;
     }

     bool operator<(const stu& s)//一定要自行重载“<”运算符,否则会因为没有合适的比较方法而报错
     {
         return ((this->name < s.name) && (this->num < s.num));
     }

     string name;
     int num;
 };

int main()
{
    vector<stu>vs1 = { {"aaa", 1}, {"bbb", 2}, {"ccc", 3} };
    vector<stu>vs2 = { {"bbb", 2}, {"ddd", 3}, {"eee", 4} };
    vector<stu>vsTarget;

    set_difference(vs2.begin(), vs2.end(), vs1.begin(), vs1.end(), back_inserter(vsTarget));//该方法不需要自行开辟目标容器的大小,或者说不能手动提前开辟
    for (vector<stu>::iterator it = vsTarget.begin(); it != vsTarget.end(); ++it)
    {
        cout << "姓名:" << it->name << " 学号:" << it->num << '\n';
    }
	return 0;
}

对于自定义类型推荐使用这种方法,不需要想目标容器需要开到多大。该方法需要在第四个参数使用back_inserter()来确定进行中的迭代器位置。

set_union,set_difference,set_intersection三种模板需要注意的点是一样的。

以上为个人初学防止忘记而做的一个笔记。

相关推荐

  1. 使用Redis缓存需要注意地方

    2024-02-07 20:30:01       7 阅读
  2. Linux: eBPF: bcc-tools:tcpdrop使用需要注意问题

    2024-02-07 20:30:01       37 阅读
  3. 使用OTB数据集需要注意一个问题

    2024-02-07 20:30:01       36 阅读
  4. 使用std::copy_n 对std::vector 拷贝数据时需要注意

    2024-02-07 20:30:01       13 阅读
  5. go语言切片slice使用细节注意事项整理

    2024-02-07 20:30:01       8 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-07 20:30:01       14 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-07 20:30:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-07 20:30:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-07 20:30:01       18 阅读

热门阅读

  1. SouthLeetCode-打卡24年02月第1周

    2024-02-07 20:30:01       28 阅读
  2. CDN的深入理解+搭建自己的CDN

    2024-02-07 20:30:01       35 阅读
  3. IDEA2023SpingBoot只能勾选17和21

    2024-02-07 20:30:01       35 阅读
  4. Python 字符串追加

    2024-02-07 20:30:01       29 阅读
  5. Elasticsearch单个索引数据量过大的优化

    2024-02-07 20:30:01       38 阅读
  6. C Primer Plus(第六版)15.9 编程练习 第5题

    2024-02-07 20:30:01       30 阅读