c++ - STL中迭代器和容器的关系

标签 c++ stl

美好的一天,

假设我正在用 C++ 编写一个类似 Python 的范围。它提供了随机访问容器的所有特性(当然是不可变的)。对于以下情况,我心中提出了一个问题:

我有两个不同的迭代器,它们指向范围容器的不同实例。问题是这两个范围相等。即它们代表相同的范围。您是否允许出现以下情况:

fact: range1 == range2 e.g.
---------------------------
range range1(10, 20, 1), range2((10, 20, 1);
range::iterator i = range1.begin(), j = range2.begin();
assert(i == j); // would you allow this?

抱歉,如果我缺少 STL 中的简单设计规则:)

最佳答案

默认情况下,在 STL 中,来自两个不同容器的两个迭代器是不具有可比性的。这意味着,行为是未指定的。所以你想做什么就做什么,没有人应该尝试。

编辑

仔细查看该标准后,第 24.1 节第 6 段指出:

An iterator j is called reachable from an iterator i if and only if there is a finite sequence of applications of the expression ++i that makes i == j. If j is reachable from i, they refer to the same container.

这意味着,如果您允许 i == jij 位于两个不同的容器中,那么您确实认为这两个容器都是相同。由于它们是不可变的,所以这完全没问题。只是语义问题。

关于c++ - STL中迭代器和容器的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2234071/

相关文章:

c++ - 如何测试unsigned char数组的结尾?

c++ - STL算法中排序函数的问题

c++ - 在 union 中存储 STL 迭代器是否合法?

c++ - QPointer 可以成为 std::map 的关键吗

c++ - 有没有办法检查哪个进程正在接收用户输入?

c++ - move 语义和 unique_ptr

c++ - 采访: Maximum path sum in a 2-D matrix using recursion.路径恢复

c++ - SFML 2.0 循环 Sprite 显示不止一次

c++ - 为什么 remove_if( ..., lambda ) 表达式需要赋值运算符?

c++ - 如何使用 STL 排序函数根据第二列对二维数组进行排序?