C++ 向量结束迭代器

C++ 向量结束迭代器,c++,stl,vector,iterator,C++,Stl,Vector,Iterator,可能重复: 实际上,在大多数STL实现中,std::vector::iterator可能是作为包装的T*实现的,因此每个迭代器都与唯一的内存地址相关联(假设迭代器来自非空向量) 然而,这是一个实现细节。是否有任何真正的保证从C++标准中,每个向量迭代器是什么独特的?具体来说,一个非空向量的end()迭代器是否可以与另一个非空向量的end()迭代器相等 例如: std::vector<int> v1; std::vector<int> v2; /* Fill both v

可能重复:

实际上,在大多数STL实现中,
std::vector::iterator
可能是作为包装的
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?
std::vector v1;
std::向量v2;
/*用值填充两个向量*/
断言(v1.end()!=v2.end());//C++保证这个断言会成功吗?

向量不能重叠,因此一个非空容器的端部不能轻易成为另一个非空容器的端部。可以想象,一个向量的端点等于另一个空向量的端点。但是我认为您不允许将迭代器比较到不同的容器中,所以这没有多大关系。

对于每个
向量
都可能有一个特殊的
end()
(但不太可能,因为迭代器当时不可能是原始指针),但正如您所说的,这是未定义的行为。