Реализовать класс итератора для вектора.
Написать на C++
cpp
#include <iostream>
#include <vector>
class VectorIterator {
public:
// Конструктор итератора. Принимает ссылку на вектор и инициализирует начальное значение
VectorIterator(std::vector<int>& vec, int index = 0) : m_vec(vec), m_index(index) {}
// Оператор сравнения на равенство
bool operator==(const VectorIterator& other) const {
return m_index == other.m_index;
}
// Оператор неравенства
bool operator!=(const VectorIterator& other) const {
return !(*this == other);
}
// Оператор разыменования
int& operator*() const {
return m_vec[m_index];
}
// Оператор индексирования
int& operator[](int offset) const {
return m_vec[m_index + offset];
}
// Оператор префиксного инкремента
VectorIterator& operator++() {
++m_index;
return *this;
}
// Оператор постфиксного инкремента
VectorIterator operator++(int) {
VectorIterator temp = *this;
++(*this);
return temp;
}
private:
std::vector<int>& m_vec; // Ссылка на вектор
int m_index; // Индекс текущего элемента
};
int main() {
std::vector<int> myVector = {1, 2, 3, 4, 5};
// Создаем итератор, указывающий на первый элемент вектора
VectorIterator it(myVector);
// Проходим по вектору с помощью итератора
for (; it != VectorIterator(myVector, myVector.size()); ++it) {
std::cout << *it << " ";
}
return 0;
}
В данном примере класс VectorIterator представляет собой итератор для вектора. Он имеет приватные переменные - ссылку на вектор m_vec и индекс текущего элемента m_index. Конструктор итератора принимает ссылку на вектор и необязательный параметр index, который определяет начальное значение индекса.
В классе VectorIterator перегружаются следующие операторы:
- Оператор сравнения на равенство (==), который сравнивает индексы двух итераторов.
- Оператор неравенства (!=), который просто инвертирует результат сравнения на равенство.
- Оператор разыменования (*), который возвращает ссылку на текущий элемент вектора (по индексу m_index).
- Оператор индексирования ([]), который возвращает ссылку на элемент вектора с отступом от текущего индекса.
- Операторы инкремента (префиксный ++ и постфиксный ++), которые увеличивают значение индекса на 1 и возвращают измененный итератор.
Далее в функции main() создается объект myVector типа std::vector<int>, который содержит элементы 1, 2, 3, 4, 5. Затем создается итератор it, который указывает на первый элемент вектора. В цикле for проходим по вектору с помощью итератора, выводя значения элементов на экран.
В результате выполнения программы на экран будет выведено: "1 2 3 4 5".
Таким образом, создание итератора для вектора позволяет работать с элементами вектора, используя удобный интерфейс операторов. Итераторы позволяют обращаться к элементам контейнера и проходить по ним в циклах, что упрощает манипуляции с данными.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет