如果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());
如果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());
在实践中,并不多。如果您将大量已经订购的元素插入到空的set
中,则第二个元素会更快一些,但就是这样。 std::insert_iterator
用迭代器调用insert
; std::set
将其解释为提示,并且如果插入紧接在提示之前,则在恒定时间插入(而不是lg n)。 (实际上,如果set
是空的,我认为既会做同样的事情。)
从http://www.sgi.com/tech/stl/insert_iterator.html
在排序的关联容器的情况下,然而,在insert_iterator的构造迭代器几乎是无关紧要。新元素不一定会形成连续的范围;他们将出现在容器中的适当位置,按键升序排列。它们的插入顺序仅影响效率:将已排序的范围插入Sorted关联容器中是O(N)操作。
您是否阅读过任何文档?这很容易通过谷歌搜索找到。 – 2011-05-06 09:50:07
好吧,他们是两个不同的迭代器,这有帮助吗?除此之外,你会分裂头发...(即配置文件找出!) – Nim 2011-05-06 10:03:20
@Nim - 我不知道它是如何写在标准 – Loom 2011-05-06 12:49:35