Руководство по итератору C++

C++ Изучение

Итератор — это объект, подобный указателю, который указывает на элемент, присутствующий внутри контейнера, например массивы, структуры и т.д. Указатель используется для перемещения по данным внутри контейнера. Итераторы играют важную роль в соединении с контейнерами через алгоритмы. Указатель — это абсолютная часть указателя. Указатель может перемещаться по контейнерам, содержащим элементы, перемещаясь и указывая на конкретный элемент. Но не все итераторы аналогичны указателям.

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

Операции, выполняемые итераторами

Итератор — это усовершенствованная форма указателя, разработанная для перебора элементов структур и т.д. Все итераторы указывают на определенную позицию контейнера. Это похоже на индекс массива, который определяет номер слота, но индекс не может выполнять операции с содержимым, присутствующим внутри определенного индекса. Это делается указателями (итераторами). У итераторов есть некоторые базовые операции, как у обычных указателей. Разберем каждую операцию подробнее.

Operator ( *)

Он представлен символом звездочки. Это используется для возврата значения, которое присутствует в текущей позиции.

Operator (++)

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

Operator == and !=

Он соответствует положению двух итераторов. Эквивалентный знак означает (равно?), А второй — отрицание эквивалентного знака (не равно).

Operator (=)

Он используется для назначения итератору позиции определенного элемента, на который он хочет ссылаться.

Разница между итераторами и базовыми указателями

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

Читайте также:  Что такое CMP? Объяснение платформ управления облаком

Begin()

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

End()

Этот итератор представляет собой конец элементов в контейнере. Этот тип итератора также известен как итератор «до конца».

Это явление также относится к полуоткрытому диапазону, содержащему первый элемент, но не последний. Это явление имеет некоторые преимущества, например, позволяет избежать обработки пустых диапазонов. Для пустых диапазонов begin равно end ().

Типы итераторов и примеры

Есть 5 типов итераторов:

У каждого алгоритма разные требования к каждому итератору. Например, для алгоритма find () необходимо написать оператор ++, чтобы итератор мог перемещаться по контейнеру. У него есть доступ на чтение, но нет доступа на запись.

Итераторы ввода

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

Это только увеличит значения. Теперь рассмотрим пример, приведенный ниже. Здесь мы будем использовать контейнер с именем «данные». Iter — это объект, который будет перемещаться по контейнеру.

Здесь мы будем использовать контейнер с именем «данные»

# Istream_iterator<int> eos

Это для итератора конца потока, который считывает значения до конца файла.

Итератор вывода

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

Прямые итераторы

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

В этом примере мы использовали вектор, чтобы найти квадрат элементов. Для этого используется библиотека векторных классов с другими исходными библиотеками.

# Template <typename ForwardIterator>

Здесь запускается прямой итератор. Чтобы взять квадрат, используется цикл for, чтобы получить квадрат значений. Параметры функции принимают значение, переданное через основную функцию. Двум переменным присваиваются первое и последнее значение массива. Это условие выполняется, если первое значение не эквивалентно последнему, то повторяется первое.

# *first = (*first) * (*first);

Чтобы взять квадрат, используется цикл for, чтобы получить квадрат значений

Результирующее значение отобразит все значения и их квадраты соответственно.

Результирующее значение отобразит все значения

Итераторы произвольного доступа

Случайный означает любой произвольный элемент. Это включает в себя некоторые алгоритмы, такие как sort () и двоичный поиск. Поскольку они оба способны прыгать прямо в любую случайную позицию в контейнере. Мы будем использовать здесь пример, чтобы объяснить работу итератора с произвольным доступом. Этот код будет выводить случайный элемент вектора, который мы предоставляем. Это примет два параметра в случайной функции, как и прямой итератор. Но в отличие от прямого итератора, он будет принимать случайные первые и случайные последние элементы. Случайно выбранный последний элемент вычитает случайно выбранный первый элемент. Оба этих случайных значения действуют как функции begin () и end ().

Случайно выбранный последний элемент вычитает случайно выбранный первый элемент

На выходе будут отображаться случайные значения от 0 до 10, как мы описали здесь диапазон чисел.

На выходе будут отображаться случайные значения от 0 до 10

Двунаправленный итератор

Двунаправленный итератор — это последний тип итераторов, он содержит все функции прямого итератора, а затем поддерживает операторы декремента в форме префикса и постфикса.

Заключение

«Итератор C ++» — это статья, в которой рассматриваются все основные операции итераторов. Он также демонстрирует тип итераторов с подходящими примерами. Итератор играет важную роль, когда вам нужно искать или сортировать данные. Кроме того, в этом руководстве также описывается доступ итератора для чтения и записи к любому контейнеру.

Оцените статью
bestprogrammer.ru
Добавить комментарий