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


Answers

Производительность разумна, нет никакой разницы. Единственная цель иметь const_iterator над iterator - управлять доступностью контейнера, на котором выполняется соответствующий итератор. Вы можете понять это более четко с помощью примера:

std::vector<int> integers{ 3, 4, 56, 6, 778 };

Если мы будем читать и писать члены контейнера, мы будем использовать итератор:

for( std::vector<int>::iterator it = integers.begin() ; it != integers.end() ; ++it )
       {*it = 4;  std::cout << *it << std::endl; }

Если бы мы только читали члены integers контейнера, вы могли бы использовать const_iterator, который не позволяет писать или изменять элементы контейнера.

for( std::vector<int>::const_iterator it = integers.begin() ; it != integers.end() ; ++it )
       { cout << *it << endl; }

ПРИМЕЧАНИЕ. Если вы попытаетесь изменить содержимое, используя * его во втором случае, вы получите сообщение об ошибке, потому что оно доступно только для чтения.

Question

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

Спасибо.




Related