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&".