【问题标题】:Vector end iterators [duplicate]向量结束迭代器[重复]
【发布时间】:2011-07-04 23:41:50
【问题描述】:

可能重复:
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?

【问题讨论】:

    标签: c++ stl vector iterator


    【解决方案1】:

    向量不能重叠,因此一个非空容器的末端不能轻易成为另一个非空容器的末端。可以想象一个向量的结尾等于另一个空向量的结尾。但我不认为你可以将迭代器与不同的容器进行比较,所以这并不重要。

    【讨论】:

    • 对于每个vector 有一个特殊的end() 值是可能的(但不太可能,因为那时迭代器不能是原始指针),但就像你说的那样,这是未定义的行为找出来。
    猜你喜欢
    • 2021-03-16
    • 2016-06-29
    • 2015-02-19
    • 2019-04-19
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 2012-08-16
    • 1970-01-01
    相关资源
    最近更新 更多