C ++: Как написать const_iterator? - PullRequest
8 голосов
/ 30 июня 2009

Я написал свой собственный шаблон контейнера с итератором. Как мне реализовать 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 ]

4 голосов
/ 30 июня 2009

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

2 голосов
/ 30 июня 2009

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

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

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

0 голосов
/ 14 января 2010

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

...