Просто небольшое введение, с простыми словами.
В С++ итераторы - это "вещи", на которых вы можете написать, по крайней мере, оператор разыменования *it
, оператор инкремента ++it
, а для более продвинутых двунаправленных итераторов - декремент --it
и, что не менее важно, для случайных Итераторам доступа необходим индекс оператора it[]
и, возможно, сложение и вычитание.
Такие "вещи" на С++ являются объектами типов с соответствующими перегрузками оператора, или простые и простые указатели.
std::vector<>
- это класс контейнера, который обертывает непрерывный массив, поэтому указатель как итератор имеет смысл. В сетях и в какой-то литературе вы можете найти vector.begin()
, используемый в качестве указателя.
Обоснование использования указателя - это меньшие накладные расходы, более высокая производительность, особенно если оптимизирующий компилятор обнаруживает итерацию и делает свою вещь (векторные инструкции и прочее). Использование итераторов может быть сложнее оптимизировать компилятор.
Зная это, мой вопрос в том, почему современные реализации STL, скажем, MSVС++ 2013 или libstdС++ в Mingw 4.7, используют специальный класс для векторных итераторов?