2010-07-21 68 views

回答

11

是的,只要这两个迭代器都没有失效。

例如,下面的就不会是有效的:

std::deque<int> d; 

std::deque<int> begin1 = d.begin(); 
d.push_front(42);     // invalidates begin1! 
std::deque<int> begin2 = d.begin(); 
assert(begin1 == begin2);   // wrong; you can't use begin1 anymore. 
4

是,begin()将返回给一个容器实例相同的迭代器,除非你以某种方式改变容器(end()拥有此属性以及)。例如,std::vector::push_back()可能会导致数组重新分配以适应新的元素。

+1

要当心使用期限'same'。我不认为所有的容器都会为同一个项目返回相同的迭代器。虽然他们会比较与==相比。 – 2010-07-21 04:59:14

+0

你说得对,我已经改写了我的答案。 – 2010-07-21 05:01:57

+1

Martin York的评论仍然成立:每次调用'begin()'都会返回一个不同的迭代器,即使它们比较相同。目前这是挑剔的,但迭代器不会一样。 '&c.begin()!=&c.begin()'即使'c.begin()== c.begin()'(假设单线程上下文)。 – 2010-07-21 07:28:01