Подтвердить что ты не робот

Могу ли я выполнить арифметику указателя на STL:: vector:: iterator

В настоящее время я использую итератор для поиска по вектору и проверки его элементов. Я обращаюсь к элементам с помощью

std::vector<int>::iterator it;
if (*it == 0);

Можно ли использовать ту же логику арифметического стиля указателя, чтобы также проверить следующий элемент (без изменения моего итератора)?

Сначала мне нужно посмотреть, не вытеснит ли он итератор за пределы

if (it != myvec.end())

Затем проверьте как текущий элемент, так и следующий элемент

if (*it == 1 && *(it + 1) == 1)

Будет ли это работать, как я ожидаю от использования указателей?

4b9b3361

Ответ 1

Да, итераторами для std::vector являются итераторы произвольного доступа, поэтому вы добавляете/вычитаете интегральные значения для получения других действительных итераторов.

Технически, это может быть не арифметика указателей, но они действуют точно так же, как указатели.

Ответ 2

Это будет действительно работать, поскольку векторный итератор является итератором произвольного доступа. Это не только вы можете воздействовать на них, как и на указатели, но они в значительной степени реализованы с помощью арифметики указателей/указателей.

Ответ 3

Хорошо, если итератор находится на последнем элементе контейнера, то

*(it + 1) 

имеет поведение undefined. Вы должны проверить, что

it + 1 != end

до разыменования.