Задача состоит в реализации класса, объекты которого позволяют последовательно просматривать элементы некоторого набора других объектов. Сначала рассмотрим эту задачу в абстрактной форме.
Пусть есть контейнер каких-то объектов. Тип объектов и способ их хранения в контейнере не имеют принципиального значения. В нашем случае это будет массив целых чисел. То есть объектами являются целые числа, а способ хранения набора — массив фиксированной длины. Итератором по контейнеру является объект, который содержит в себе информацию о контейнере (с которым этот итератор связан) и своей текущей позиции внутри набора. С одним контейнером может быть одновременно связано несколько итераторов, которые могут "находиться" на разных элементах.
Таким образом есть два класса: контейнер чего-то и итератор по этому контейнеру. Контейнер предоставляет общий интерфейс работы с набором объектв: создание контейнера, добавление и удаление элементов, поиск элеента по значению, уничтожение контенера и т.п. Способ хранения элементов от пользователя скрыт. Класс итератор реализует следующий интерфейс (набор функций):
Класс итератор является другом (friend
) контейнера и
ему известен способ хранения элементов контейнера. Состояние
итератора включает переменные, описывающие текущую позицию
итератора. Если у нас есть два типа контейнеров, например, массив
целых чисел и список матриц, то должно быть и два типа
итераторов. Первый — для обхода массива, второй — для
обхода списка матриц. Состоянием первого итератора может быть
значение индекса массива, второго — указатель на
элемент списка.
Требуется реализовать два класса: контейнер целых чисел на основе массива фиксированной длины, и итератор для этого контейнера.
Интерфейс контейнера:
Интерфейс итератора:
begin
контейнера);Подсказка-рекомендация: состояние итератора может включать указатель на объект-контейнер (с каким конкретно набором целлых чисел этот итератор связан) и значение индекса массива (массив — приватная переменая контейнера, значение индекса — текущая позиция в контейнере).
В случае обнаружения ошибочных данных методы, вкючая конструкторы, должны генерировать исключения.
Решение должно содержать набор тестов, которые вы разрабатываете самостоятельно.