美好的一天,
假设我正在用 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 == j
与 i
和 j
位于两个不同的容器中,那么您确实认为这两个容器都是相同。由于它们是不可变的,所以这完全没问题。只是语义问题。
关于c++ - STL中迭代器和容器的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2234071/