C++: как написать итератор const?

Я написал свой собственный шаблон контейнера с итератором. Как реализовать const_iterator?

template <class T>
class my_container {
 private:
  ...

 public:
  my_container() : ... { }
  ~my_container() { }

  class iterator : public std::iterator<std::bidirectional_iterator_tag, T> {
  public: ...

3 ответов


единственное различие должно заключаться в том, что при удалении ссылки на итератор const вы получаете ссылку const, а не ссылку на объект в контейнере.


Я нахожу самый простой способ реализовать итераторы -boost:: iterator. Если вы хотите свернуть свой собственный, Я думаю, что подпись должна быть:

class const_iterator : public std::iterator<std::bidirectional_iterator_tag, const T> {

с реализацией то же самое (предполагая, что вы используете reference_type и так далее в сигнатурах функций)


Roger Pate, value_types являются "простыми". Я подозреваю, что вы увидите const, если посмотрите на iterator_traits::const_iterator>::reference, который, я думаю, будет "const int&".