Реализация собственного класса итератора для цикла for-range-based в C
Привет! Меня зовут Данил и сегодня я хочу поделиться с вами своим опытом реализации собственного класса итератора в C ․ Итераторы — это очень мощный инструмент, который позволяет нам проходить по элементам какой-либо коллекции или диапазона значений в цикле for-range-based․
Чтобы реализовать собственный класс итератора, нам понадобится объявить класс и определить в нем несколько методов․ Давайте создадим класс с именем ″RangeIterator″ для прохода по диапазону целых чисел․
cpp
class RangeIterator {
private⁚
int current; // текущий элемент
int start; // начальное значение
int end; // конечное значение
public⁚
RangeIterator(int start, int end) ⁚ start(start), end(end), current(start) {}
// Перегрузка оператора *, возвращает текущий элемент
int operator* const {
return current;
}
// Перегрузка оператора , перемещает итератор к следующему элементу
RangeIteratorn operator {
current;
return *this;
}
// Перегрузка оператора , проверяет равенство итераторов
bool operator(const RangeIteratorn other) const {
return current other․current;
}
// Перегрузка оператора !, проверяет неравенство итераторов
bool operator!(const RangeIteratorn other) const {
return !(*this other);
}
};
Теперь у нас есть класс RangeIterator, который имеет три переменные-члена⁚ current, start и end․ В конструкторе мы инициализируем start и end переданными значениями и задаем current равным start․
Мы также определили несколько методов в классе․ Оператор * возвращает текущий элемент, оператор перемещает итератор к следующему элементу, оператор проверяет равенство итераторов, а оператор ! проверяет их неравенство․
Теперь, когда у нас есть класс RangeIterator, мы можем использовать его в цикле for-range-based для прохода по диапазону целых чисел⁚
cpp
int main {
int start 1;
int end 10;
for (int i ⁚ RangeIterator(start, end)) {
std⁚⁚cout << i << ″ ″;
}
В этом примере мы создаем экземпляр класса RangeIterator, передавая начальное и конечное значения диапазона․ Затем мы используем этот итератор в цикле for-range-based для прохода по диапазону и печати каждого элемента․
Результат выполнения программы будет⁚
1 2 3 4 5 6 7 8 9 10
Таким образом, мы успешно реализовали собственный класс итератора для использования в цикле for-range-based․ Я надеюсь, что эта статья была полезной для вас!