2011-05-06 64 views
30

如果it1和it2有什么不同?对于std :: set,std :: inserter使用.begin()和.end()是否有区别?

std::set<sometype> s; 

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

您是否阅读过任何文档?这很容易通过谷歌搜索找到。 – 2011-05-06 09:50:07

+0

好吧,他们是两个不同的迭代器,这有帮助吗?除此之外,你会分裂头发...(即配置文件找出!) – Nim 2011-05-06 10:03:20

+0

@Nim - 我不知道它是如何写在标准 – Loom 2011-05-06 12:49:35

回答

30

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

6

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

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

相关问题