我有一个比int
或指针重的迭代器(它意味着以三维周期格子迭代一个站点的最近邻居,所以它必须包含某些私有支持结构)。要判断迭代器是否位于容器的末尾,我只需要进行一次比较,但要创建一个指向过去结束的迭代器,我还必须创建支持结构。
因此我认为我可以让容器的end()
方法返回int
,然后重载operator==()
以避免创建完整的一个过去的迭代器。 This answer暗示这可能是一个好主意。对于双向迭代器,似乎这是错误的,因为我后来(例如this question)知道,无论end()
返回什么,都必须可以递减到最后一个元素。
由于我的迭代器只是向前,我认为它仍然可以,但现在我发现我不能使用std::find()
(可能还有其他STL算法),它需要两个相同(迭代器)类型的参数。
所以,我的问题是:end()
返回的类型不同于begin()
违反标准行为吗?这是个坏主意吗?
答案 0 :(得分:6)
它们必须是同一类型。
改变这一点是一些最有希望的范围提案的焦点。它不是一个好的要求,但至少目前是必需的。