Предположим, у вас есть следующий вектор и массив C:
vector<long> v = {1,2,3,4,5};
for (auto start_itr = v.begin(); start_itr != v.end(); ++start_itr) {
statements;
}
а также
long ary[5]{1,2,3,4,5};
for (long *ptr = ary; ptr < (ary+5); ++ptr) {
statements;
}
В коде для массива ++ ptr относится к добавлению 1 к ptr, то есть арифметике указателя - добавление 8 байтов перемещается к следующему длинному элементу массива. Однако для вектора применяется тот же принцип арифметики указателей; т.е. добавление 1 к start_itr означает перемещение на 8 байтов к следующему элементу b / c, это вектор long?
Я знаю, что тип итератора по сути является указателем, и в этом есть смысл, но я хочу быть уверенным.
I know the iterator type is essentially a pointer Во-первых, это верно только для определенного типа итератора, например, итератора вектора. Ваше утверждение кажется чрезмерно обобщенным. Во-вторых, я сомневаюсь, что сам стандарт языка гарантирует, что vector::iterator всегда должен быть указателем. Лично я бы просто не рассматривал итератор как эквивалент указателя





Итераторы векторов - это бесплатная абстракция указателей. Таким образом, ++ перемещается вперед на 1, +7 на 7 и т. д.
Векторные итераторы - это итераторы с произвольным доступом, поэтому они во многом похожи на указатели. Как и указатели, переход за последний элемент (он же .end()) является неопределенным поведением.
Другие итераторы более ограничены; std::list или std::map doea не поддерживает +7, но поддерживает ++.
Думаю, компилятор подтвердит вашу гипотезу.