c++ Реализация собственного итератора, похожего на directory_iterator из filesystem
В std::filesystem есть directory_iterator, который очень красиво позволяет итерировать директорию:
for(auto& p : std::filesystem::directory_iterator(path)) { /*do smth*/ }
Но как сделать что-то подобное самостоятельно, к примеру, для итерирования чисел, чтобы можно было написать что-то такое:
for(int i : Iterator(10)) { std::clog << i << '\n'; }
И получить в консоль:
0
1
2
3
4
5
6
7
8
9
10
Ответы (1 шт):
Автор решения: KoVadim
→ Ссылка
Легко. Нужно только определить свой итератор и вспомогательный объект.
#include <iostream>
class my_iterator
{
int i;
public:
explicit my_iterator(int position = 0) : i{position} {}
// значение итератора - собственно число
int operator*() const { return i;}
// при переходе вперед, просто увеличиваем содержимое итератора
my_iterator& operator++() {
++i;
return *this;
}
// итератор должен знать, когда останавливаться
bool operator!=(const my_iterator& other) {
return i != other.i;
}
};
class Iterator
{
int a; // начало диапазона
int b; // конец
public:
Iterator(int to) : a{0}, b{to} {}
my_iterator begin() const { return my_iterator(a);}
my_iterator end() const { return my_iterator(b);}
};
int main()
{
for (int i : Iterator(10)) {
std::cout << i << '\n';
}
}