← Назад к вопросам

Что такое random_access_iterator?

2.0 Middle🔥 151 комментариев
#STL контейнеры и алгоритмы

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Random Access Iterator: Определение и Возможности

Random Access Iterator — это один из пяти типов итераторов в C++ STL, обеспечивающий произвольный доступ к элементам контейнера за константное время O(1). Это наиболее функциональный тип итератора с полным набором операций.

Основные Характеристики

Random Access Iterator поддерживает все операции, которые доступны для других типов итераторов, плюс дополнительные операции произвольного доступа:

Основные операции:

  • Дерефирование: *it — получить значение элемента
  • Переход: ++it, --it — переход к следующему/предыдущему элементу
  • Сравнение: it1 == it2, it1 != it2 — проверка равенства
  • Арифметика итератора: it + n, it - n, it += n, it -= n — смещение на n позиций
  • Индексный доступ: it[n] — доступ к элементу на расстоянии n от текущей позиции
  • Сравнение позиций: it1 < it2, it1 <= it2, it1 > it2, it1 >= it2 — сравнение позиций
  • Разность итераторов: it1 - it2 — расстояние между итераторами

Примеры Использования

#include <vector>
#include <iostream>

int main() {
    std::vector<int> v = {1, 2, 3, 4, 5};
    
    auto it = v.begin();
    
    // Арифметика: перемещение на 2 позиции вперёд
    it += 2;
    std::cout << *it << std::endl;  // Выведет: 3
    
    // Индексный доступ
    std::cout << it[1] << std::endl;  // Выведет: 4 (элемент на 1 позицию дальше)
    
    // Сравнение позиций
    auto it2 = v.begin() + 3;
    if (it < it2) {
        std::cout << "it находится раньше it2" << std::endl;
    }
    
    // Разность итераторов
    int distance = it2 - it;
    std::cout << "Расстояние: " << distance << std::endl;  // Выведет: 1
    
    return 0;
}

Контейнеры с Random Access Iterator

Random Access Iterator предоставляют следующие контейнеры STL:

  • std::vector — динамический массив
  • std::deque — двусторонняя очередь
  • std::array — статический массив
  • Строки: std::string и std::string_view

Иерархия Итераторов

В C++ существует иерархия типов итераторов:

  1. Input Iterator — только чтение и продвижение вперёд
  2. Output Iterator — только запись и продвижение вперёд
  3. Forward Iterator — чтение/запись, продвижение вперёд
  4. Bidirectional Iterator — чтение/запись, продвижение в обе стороны
  5. Random Access Iterator — все операции, включая произвольный доступ

Random Access Iterator может использоваться везде, где требуется любой из предыдущих типов (принцип подстановки Лисков).

Производительность

Константная сложность O(1) для операций произвольного доступа делает Random Access Iterator идеальным для алгоритмов, требующих быстрого доступа к элементам, таких как сортировка, бинарный поиск и другие операции, реализованные в <algorithm>.

Что такое random_access_iterator? | PrepBro