2011-02-26 4 views
4

가능한 중복 :
comparing iterators from different containers벡터 끝 반복자

실제로

, std::vector<T>::iterator 아마 그래서 모든 반복자의 고유 한 메모리 주소가 연결되어, 대부분의 STL 구현에 싸여 T*로 구현됩니다 (반복자가 비어 있지 않은 벡터에서 온다고 가정).

그러나 구현 세부 사항입니다. 모든 벡터 반복자가 어떻게 든 독특하다는 C++ 표준의 실제적인 보증이 있습니까? 특히 비어 있지 않은 벡터의 end() 반복자가 다른 비어 있지 않은 벡터의 반복자 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'에 대해 (ender) 특별한 값을 가질 수는 있습니다 (그러나 이터레이터는 원시 포인터가 될 수 없기 때문에 불가능합니다).하지만 말한 것처럼 정의되지 않은 동작입니다. –