Могу ли я сделать арифметику указателей на STL :: vector :: iterator - PullRequest
11 голосов
/ 28 февраля 2010

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

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

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

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

if (it != myvec.end())

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

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

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

Ответы [ 3 ]

16 голосов
/ 28 февраля 2010

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

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

3 голосов
/ 28 февраля 2010

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

1 голос
/ 19 сентября 2014

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

*(it + 1) 

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

it + 1 != end

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...