c++ итераторы - в чем разница между const_iterator и итератором?




2 Answers

Разницы в производительности нет.

const_iterator - это итератор, который указывает на значение const (например, указатель const T* ); разыменовывая его, возвращается ссылка на постоянное значение ( const T& ) и предотвращает модификацию ссылочного значения: она обеспечивает const-correctness .

Когда у вас есть ссылка const на контейнер, вы можете получить только const_iterator .

Отредактировано: Я упоминал « const_iterator возвращает постоянные указатели», что неточно, благодаря Брэндону, указав его.

Изменить: для объектов COW получение неконстантного итератора (или разыменование его), вероятно, приведет к копированию. (Некоторые устаревшие и теперь запрещенные реализации std::string используют COW.)

сравнение итераторов

В чем разница между этими двумя аспектами реализации внутри STL. Какая разница в производительности? Я предполагаю, что когда мы пересекаем вектор в «read only wise», мы предпочитаем const_iterator , не так ли?

Спасибо.




если у вас есть список a, а затем следующие утверждения

list<int>::iterator it; // declare an iterator
    list<int>::const_iterator cit; // declare an const iterator 
    it=a.begin();
    cit=a.begin();

вы можете изменить содержимое элемента в списке с помощью «it», но не «cit», то есть вы можете использовать «cit» для чтения содержимого, а не для обновления элементов.

*it=*it+1;//returns no error
    *cit=*cit+1;//this will return error



Related

c++ stl iterator const-iterator