[c++] В чем разница между const_iterator и non-const iterator в C ++ STL?



Answers

Они должны в значительной степени быть понятными. Если итератор указывает на элемент типа T, то const_iterator указывает на элемент типа 'const T'.

Это в основном эквивалентно типам указателей:

T* // A non-const iterator to a non-const element. Corresponds to std::vector<T>::iterator
T* const // A const iterator to a non-const element. Corresponds to const std::vector<T>::iterator
const T* // A non-const iterator to a const element. Corresponds to std::vector<T>::const_iterator

Константный итератор всегда указывает на один и тот же элемент, поэтому сам итератор является const. Но элемент, который он указывает, не должен быть const, поэтому элемент, на который он указывает, может быть изменен. Const_iterator - это итератор, который указывает на элемент const, поэтому, хотя сам итератор может быть обновлен (например, увеличен или уменьшен), элемент, который он указывает, не может быть изменен.

Question

В чем разница между const_iterator и iterator и где вы будете использовать один над другим?




(как говорили другие) const_iterator не позволяет вам изменять элементы, на которые он указывает, это полезно внутри методов класса const. Это также позволяет вам выразить свое намерение.




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




Related