2010-07-21 69 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