具有符合STL的const Iterator的非const引用类型?

时间:2014-06-06 00:33:01

标签: c++ c++11 boost stl iterator

我正致力于编写一个基本上为其他数据提供灵活接口的类。我想使用符合STL的迭代器迭代元素,并使用boost::iterator_facade在正确的轨道上进行迭代,但我有一个关于一致性的问题,我似乎无法找到正式答案

我是否必须为STL一致性提供const迭代器?

我使用std::shared_ptr<T>&作为迭代器提供的非const解引用类型。如果我确实提供了一个const迭代器,那么为我的解除引用类型而不是std::shared_ptr<T>&提供std::shared_ptr<const T>&是否可以接受?

我有一种感觉,两者的答案都是否定的,但是我无法找到证实/使这些怀疑无效的官方来源。我认为第二个问题更多的是语义问题。

1 个答案:

答案 0 :(得分:1)

您决定const应该达到多远。

标准方法是,只对const返回的元素(可能通过引用)发送const_iterator。这也是标准库的作用。
因此,如果标准迭代器的返回类型为std::shared_ptr<T>&,则常量迭代器的返回类型应为const std::shared_ptr<T>&

BTW:您是否阅读了描述迭代器要求的标准部分,例如:

Random Access -> Bidirectional -> Forward -> Input
                                             Output

完整的容器接口提供了const迭代器和非const迭代器 如果你把自己局限于那些不会试图获得const迭代器的算法,你可以省略它们。