【问题标题】:Why do we need an inserter function call when doing a set_union for a set?为什么我们在为集合做 set_union 时需要一个插入器函数调用?
【发布时间】:2009-10-09 16:01:05
【问题描述】:

我需要像这样调用 STL 的 set_union 函数:

set<int> a1, a2;

set_union(a1.begin(), a1.end(), a2.begin(), a2.end(), inserter(a1, a1.begin());

而不是

set_union(a1.begin(), a1.end(), a2.begin(), a2.end(), a1.begin());

为什么会这样?

【问题讨论】:

  • STL算法的问题是他们使用迭代器抽象了容器,但这使得他们无法修改这些容器的实际大小,他们只能移动里面的元素。

标签: c++ stl


【解决方案1】:

a1.begin() 根本不是输出迭代器。 inserter(a1,a1.begin()) 返回一个输出迭代器,它将为每个元素调用集合的插入函数。但我什至不确定第一个版本是否正确。您迭代插入新元素的同一集合。 (!)

既然你已经处理了 set 对象,你为什么不简单地写

a1.insert(a2.begin(),a2.end());

?

【讨论】:

  • 有时我们会过于专注于事物并使用复杂的技术。我忘了做一个集合并插入就足够了。谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-01-14
  • 1970-01-01
  • 2017-08-25
  • 2023-04-09
  • 2021-05-16
  • 1970-01-01
  • 2012-04-02
  • 2020-08-22
相关资源
最近更新 更多