2010-08-07 55 views
0

例如下面是有效的嗎?向量中允許的活動迭代器的數量

std::vector<int> vec(5, 0); 
std::vector<int>::const_iterator it1(vec.begin()); 
std::vector<int>::const_iterator it2(vec.begin()); 
//Use it1 and it2 like they don't know about each other. 

是否有允許多個活動迭代器的容器的特殊名稱?

回答

1

是的,它是有效的。

您可以將多個迭代器放入一個向量中,因爲系統具有內存來存放迭代器。

這種類型的容器的特殊名稱是「任何STL容器」。所有容器都允許這樣。

也許可以解釋爲什麼你認爲這不應該被允許?

0

只要您不執行使其他迭代器無效的操作,則迭代器數量沒有任何限制。某些操作(如插入或移除)可能會使所有其他迭代器無效。 STL容器迭代器的工作方式,他們無法(通常)處理通過其他迭代器進行的插入和刪除操作。

請注意,使用容器函數插入/移除元素也會導致迭代器無效。

潛在的問題是STL容器不知道活動迭代器的任何內容,所以他們不能告訴迭代器有什麼變化。

0

這絕對是允許的。你必須擔心的是如果你開始擦除或插入元素。不同的容器通過修改函數對迭代器失效具有不同的行爲,您必須查看文檔。例如,在vector上的erase會使刪除的元素之後的所有迭代器和元素引用無效。