Итак, скажите, пожалуйста, где я не прав?
Вы, кажется, ошибаетесь в своем предположении, что оператор ++ как-то связан с непрерывной памятью.
++ - это просто оператор, который выполняет разные операции с объектами разных типов. , Условно это делает приращение. Для целого числа это значение увеличивается на 1. В итераторе он заставляет итератор ссылаться на следующий элемент-брат. Оператор предварительного увеличения поддерживается всеми итераторами. и постинкремент поддерживается всеми входными итераторами и выходными итераторами.
Указатель является примером типа итератора. Это итератор для массивов. Как и все другие типы итераторов, он также поддерживает оператор ++.
Итераторы для всех других типов, кроме массивов, не являются указателями. Учитывая, что указатели являются единственными фундаментальными типами, которые являются итераторами, это означает, что все другие типы итераторов являются классами. Классы не имеют оператора ++ по умолчанию, но оператор может быть перегружен для классов. Итераторы должны иметь такую перегрузку.
, поэтому в list::iterator
есть функция operator++
, которая делает this=this->next
правильно?
Не совсем. this
не может быть изменено. Это было бы что-то вроде this->node = this->node->next
.