§ 14. Преобразование элементов массива
14.4. Понятие итератора
Итератор — обобщенный указатель [1], который позволяет пользователю перебирать элементы контейнера, без необходимости знать, как реализован сам контейнер. Вектор является контейнером, в котором реализован последовательный доступ к элементам, итератор позволяет обойти все элементы вектора, перемещение происходит элемент за элементом. Итераторы позволяют обращаться к элементам вектора без использования индексов. Для вектора определены стандартные итераторы begin() и end(). Итератор begin() указывает на первый элемент в векторе. Итератор end() – на место после последнего элемента вектора. Для любого итератора (it) доступны следующие операции (пример 14.6):
Для вектора итератор обеспечивает дополнительную функциональность:
Начиная со стандарта C++11, обход вектора с помощью итератора может происходить следующим образом: vector <int> a(n); for (auto i: a) cout << i << " "; [1] Указатель — переменная, обозначающая адрес памяти. Указатель предназначен для прямого обращения по адресу памяти к объекту, который расположен по этому адресу. |
Для вектора определены также реверсивные (обратные) итераторы, которые позволяют перебирать элементы контейнера в обратном направлении. Для получения реверсивного итератора применяются функции rbegin() и rend(). Итератор rbegin() указывает на конец текущего вектора, а итератор rend() — на начало вектора. Пример 14.6. Операции с итератором
Рассмотрим операции:
Итератор it указывает на начало вектора. Значение переменной x — значение элемента вектора, на который указывает итератор. Будет выведено значение 1.
Итератор сместился на один элемент и теперь указывает на элемент с индексом 1, будет выведено значение 2.
Итератор сместился на 3 элемента от начала и указывает на элемент с индексом 3, будет выведено значение 5.
После предыдущей операции итератор указывает на элемент с индексом 3, поэтому будет выведено false.
Будут выведены значения 3 и 5. Значение 5 — количество элементов в векторе. Циклу foreach соответствует следующая запись цикла for:
или
|