begin()和end()容器中的方法是否总是具有相同的返回类型?

时间:2016-03-05 18:04:04

标签: c++

我有一个比int或指针重的迭代器(它意味着以三维周期格子迭代一个站点的最近邻居,所以它必须包含某些私有支持结构)。要判断迭代器是否位于容器的末尾,我只需要进行一次比较,但要创建一个指向过去结束的迭代器,我还必须创建支持结构。

因此我认为我可以让容器的end()方法返回int,然后重载operator==()以避免创建完整的一个过去的迭代器。 This answer暗示这可能是一个好主意。对于双向迭代器,似乎这是错误的,因为我后来(例如this question)知道,无论end()返回什么,都必须可以递减到最后一个元素。

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

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

1 个答案:

答案 0 :(得分:6)

它们必须是同一类型。

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