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