容器中的 begin() 和 end() 方法应始终具有相同的返回类型

Should begin() and end() methods in a container always have the same return type?

本文关键字:返回类型 end begin 方法      更新时间:2023-10-16

我有一个比int或指针重的迭代器(它意味着在三维周期格中遍历站点的最近邻居,因此它必须包含某些私有支撑结构)。要判断迭代器是否在容器的末尾,我只需要一个比较,但要创建一个指向过去一端的迭代器,我还必须创建支持结构。

因此,我认为我可以让容器的end() mehtod 返回一个int,然后重载operator==()以避免创建一个完整的单端迭代器。 这个答案暗示这可能是一个好主意。 对于双向迭代器,这似乎是错误的,正如我后来了解到的那样(从例如这个问题中),无论返回end()什么都必须递减到最后一个元素。

由于我的迭代器只是向前的,我认为它仍然很好,但现在我发现我无法使用std::find()(可能还有其他 STL 算法),它需要两个相同(迭代器)类型的参数。

所以,我的问题是:让end()返回与begin()不同的类型是否违反了标准行为?这是个坏主意吗?

它们必须是相同的类型。

改变这一点是一些最有希望的范围提案的重点。这不是一个好要求,但它是必需的,至少目前是这样。