2011-02-26 111 views
4

可能重複:
comparing iterators from different containers矢量end迭代

在實踐中,std::vector<T>::iterator可能是實現爲大多數STL實現一個包裹T*,所以每一個迭代器與唯一的存儲器地址相關聯(假設迭代器來自非空向量)。

但是,這是一個實現細節。 C++標準中是否有任何實際保證,每個向量迭代器在某種程度上都是唯一的?具體來說,一個非空向量的迭代器是否可以等於另一個非空向量的迭代器?end()

例如:

std::vector<int> v1; 
std::vector<int> v2; 
/* Fill both vectors with values... */ 

assert(v1.end() != v2.end()); // Does C++ guarantee this assertion will succeed? 

回答

1

載體不能重疊,所以一個非空的容器的端部不易被另一非空容器的端部。一個向量的末尾可能會等於另一個空向量的末尾。但我不認爲你可以將迭代器比較到不同的容器中,所以這並不重要。

+0

對於每個vector都有一個特殊的'end()'值(但不太可能,因爲迭代器不可能是一個原始指針),但是就像你說的那樣,這是不確定的行爲。 – 2011-02-26 19:30:55