Для написания итератора, возвращающего отдельные цифры числа, можно создать класс, реализующий интерфейс итератора. Ниже приведен пример такого класса:
```cpp
#include <iostream>
class DigitIterator {
private:
int number;
int currentDigit;
public:
DigitIterator(int num): number(num), currentDigit(0) {}
bool operator!=(const DigitIterator& other) const {
return currentDigit != other.currentDigit;
}
int operator*() const {
return getNthDigit(number, currentDigit);
}
void operator++() {
++currentDigit;
}
private:
int getNthDigit(int num, int n) const {
int power10 = 1;
for (int i = 0; i < n; ++i) {
power10 *= 10;
}
return (num / power10) % 10;
}
};
int main() {
int number = 12345;
DigitIterator begin(number);
DigitIterator end(number + 1);
for (DigitIterator it = begin; it != end; ++it) {
std::cout << *it << " ";
}
return 0;
}
```
В данном примере класс DigitIterator реализует итератор, который возвращает отдельные цифры числа. В функции main() создается итератор начала и конца диапазона цифр числа и затем используется цикл для итерации по цифрам и вывода их на экран.
Чтобы создать "бесконтейнерный" итератор для итерации по цифрам чисел в разных системах счисления, можно модифицировать класс DigitIterator для принятия радикса системы счисления в конструкторе и использования его для определения n-й цифры числа. В функции getNthDigit() необходимо заменить деление и взятие остатка на операции деления и взятия остатка от деления на радикс. Пример модифицированного класса:
```cpp
#include <iostream>
class DigitIterator {
private:
int number;
int currentDigit;
int radix;
public:
DigitIterator(int num, int r): number(num), currentDigit(0), radix(r) {}
bool operator!=(const DigitIterator& other) const {
return currentDigit != other.currentDigit;
}
int operator*() const {
return getNthDigit(number, currentDigit);
}
void operator++() {
++currentDigit;
}
private:
int getNthDigit(int num, int n) const {
int powerRadix = 1;
for (int i = 0; i < n; ++i) {
powerRadix *= radix;
}
return (num / powerRadix) % radix;
}
};
int main() {
int number = 12345;
int radix = 16;
DigitIterator begin(number, radix);
DigitIterator end(number + 1, radix);
for (DigitIterator it = begin; it != end; ++it) {
std::cout << *it << " ";
}
return 0;
}
```
В данном примере создается итератор начала и конца диапазона цифр числа, принимающих значение от 0 до радикс-1. При итерации все цифры числа выводятся на экран.