Pull to refresh

Comments 6

А разве сделав константный и не константный метод доступа к итератору, мы не разделяем чтение и запись?

‘‘‘cpp
reference operator * () const;
....
reference operator * ();
‘‘‘

Итератор предполагается перемещать, поэтому сам итератор не будет константным.

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

Нет, потому что в какой нибудь сортировке итераторы не константные и есть как чтение, например *it1 < *it2, так и запись std::iter_swap(it1, it2). В обоих случаях будет вызван один и тот же метод reference operator * ().

Также следует различать тип const_iterator, объекты которого не константы, и const квалифицированный тип iterator. Первый используется, когда алгоритм не должен менять контейнер, например, в функции поиска. Второй я видел только в качестве параметра функции, когда хотят подчеркнуть, что итератор end указывает на конец диапазона и неподвижен.

Нужные кавычки висят на ё

я в курсе, но на телефоне так не получается ))

В контексте не константный вызывается и там, где записи не происходит.

Sign up to leave a comment.

Articles