Skip to main content

Что такое векторный итератор?

Итератор вектора - это конструкция компьютерного языка, которая позволяет программе считывать значения данных, содержащиеся в специализированной коллекции, называемой вектором. Векторы - это объекты, используемые для группировки связанных значений данных, аналогичные массивам и спискам. Многие компьютерные языки, особенно Java и C ++, содержат векторы и связанные с ними итераторы. Каждый язык использует различный синтаксис для итераторов, но основным механизмом во всех языках является индивидуальный доступ к каждому возможному члену группы векторов.

Перемещение по вектору с использованием итератора часто называется обходом или повторением. Векторные итераторы также можно использовать для явной идентификации конкретного объекта в векторной коллекции. Когда эта идентификация выполняется, объект идентифицируется по его индексу в векторе, а не по каким-либо характеристикам самого объекта. Действия могут быть выполнены над объектом, если разыменован итератор, предоставляя программе явный доступ к объекту, а не к вектору.

Векторные итераторы имеют очень мало шансов встретить выходящие за границы ошибки, которые могут возникнуть при переборе массивов. Хотя при деконструкции векторы по существу являются прославленными массивами, векторы почти всегда имеют некоторый тип проверки границ, который гарантирует, что векторный итератор остается на правильных индексах. При обходе вектора итератор, если он вызывается правильно, всегда начинается в начале вектора и заканчивается точно в конце. Явная спецификация неверного индекса все еще возможна в определенных контекстах, но встроенная проверка границ векторов, которая транслируется в их итераторы, предотвращает проблемы переполнения границ.

В C ++ векторы могут быть изменены во время обхода итераторами, но Java явно запрещает это. Действия Java в этом случае намного безопаснее, потому что изменение вектора во время движения итератора может привести к непреднамеренному чтению итератором вне вектора. Попытка добавить или удалить элементы из вектора во время итерации особенно опасна, особенно если начальные и конечные индексы, которые должен охватывать вектор, жестко закодированы. Векторный итератор не оборудован для обработки внезапных изменений векторов, и векторы должны быть относительно статичными при прохождении.

Векторный итератор может быть неявным или явным, и любая синтаксическая форма выполняет обход так же гладко. Несмотря на то, что кодируемый для эффективности кодируется, векторный итератор может быть замедлен очень большим вектором. В этом случае жесткое кодирование конечного индекса вектора ускоряет обход. Эта проблема не возникает с маленькими векторами, поэтому жесткое кодирование конечного индекса не вызывает заметного ускорения. Жесткое кодирование конечного индекса может повысить риск переполнения, поэтому в целом это следует делать экономно.