【问题标题】:Should begin() and end() methods in a container always have the same return type?容器中的 begin() 和 end() 方法是否应该始终具有相同的返回类型?
【发布时间】:2016-03-05 18:04:03
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c++


    【解决方案1】:

    它们必须是同一类型。

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

    【讨论】:

    • 很清楚。我不符合标准,所以我可能会被烧毁。如果有人谈论改变它,我想我试图做的事情并不是一个坏主意。更改是否也适用于转发迭代器?似乎能够从 end() 递减的要求与这种尝试的优化强烈冲突。
    • 该更改将适用于迭代器的每个类别,AFAIK。我认为,能够减少 end() 的要求将被放弃。
    猜你喜欢
    • 1970-01-01
    • 2020-11-16
    • 2020-10-13
    • 2016-11-11
    • 2013-08-14
    • 1970-01-01
    • 2014-11-03
    • 2013-07-27
    • 2016-06-27
    相关资源
    最近更新 更多