【问题标题】:Is there a difference between using .begin() vs .end() for std::inserter for std::set?将 .begin() 与 .end() 用于 std::inserter 用于 std::set 之间有区别吗?
【发布时间】:2011-08-20 01:24:50
【问题描述】:

如果it1和it2有什么区别?

std::set<sometype> s;

auto it1 = std::inserter(s, s.begin());
auto it2 = std::inserter(s, s.end());

【问题讨论】:

  • 您阅读过任何文档吗?这很容易通过谷歌搜索找到。
  • 嗯,它们是两个不同的迭代器,这有帮助吗?除此之外,你会分裂头发......(即找出来的个人资料!)
  • @Nim - 我想知道它是如何用标准编写的
  • 如果您指的是 C++ 标准,您将不得不询问该网站上的一位标准律师。我不知道...至于用法,坦率地说,我认为这很愚蠢这个 hint 必须首先提供,但如果我必须使用它,我总是使用end()

标签: c++ stl stdset insert-iterator


【解决方案1】:

在实践中,并不多。如果您将大量已经有序的元素插入到空的set 中,第二个会更快一些,但仅此而已。 std::insert_iterator 使用迭代器调用 insertstd::set 将其解释为提示,如果插入紧接在提示之前,则以恒定时间(而不是 lg n)插入。 (实际上,如果set 为空,我认为两者都会做同样的事情。)

【讨论】:

    【解决方案2】:

    来自http://www.sgi.com/tech/stl/insert_iterator.html

    然而,在排序关联容器的情况下,insert_iterator 的构造函数中的迭代器几乎是无关紧要的。新元素不一定会形成一个连续的范围;它们将按按键升序出现在容器中的适当位置。它们的插入顺序只会影响效率:将已经排序的范围插入到排序关联容器中是 O(N) 操作。

    【讨论】:

      猜你喜欢
      • 2011-04-06
      • 2014-12-05
      • 2012-04-25
      • 2020-09-22
      • 1970-01-01
      • 1970-01-01
      • 2012-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多