我正致力于编写一个基本上为其他数据提供灵活接口的类。我想使用符合STL的迭代器迭代元素,并使用boost::iterator_facade
在正确的轨道上进行迭代,但我有一个关于一致性的问题,我似乎无法找到正式答案
我是否必须为STL一致性提供const迭代器?
我使用std::shared_ptr<T>&
作为迭代器提供的非const解引用类型。如果我确实提供了一个const迭代器,那么为我的解除引用类型而不是std::shared_ptr<T>&
提供std::shared_ptr<const T>&
是否可以接受?
我有一种感觉,两者的答案都是否定的,但是我无法找到证实/使这些怀疑无效的官方来源。我认为第二个问题更多的是语义问题。
答案 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迭代器的算法,你可以省略它们。