- •1. Объектно-ориентированное программирование (oop). Объектно-ориентированная технология (oot) программирования.
- •2. Свойства оор.
- •3. Объектно-ориентированный подход (ооп). Определение составляющих объектного подхода: ооа, ood, оор.
- •4. Компоненты оор.
- •5. Объект. Основные понятия: определение объекта, его состояние, поведение, индивидуальность. Взаимодействие объектов. Отношения между объектами.
- •6. Класс. Отношения между классами. Классификация. Методы классификации.
- •7. Вопросы качества абстракция и выбора операций при создании классов и объектов.
- •9. Ссылки и параметры-ссылки. Объявления переменных.
- •10. Встраиваемые функции. Операции new и delete.
- •11. Функции-члены и данные-члены.
- •12. Интерфейсы и реализация.
- •13. Конструкторы и инициализация. Конструктор без параметров (по умолчанию). Конструктор копирования.
- •14. Деструкторы и очистка.
- •Статические члены: функции и данные.
- •16. Структуры и объединения.
- •17. Константные члены-функции и константные объекты.
- •18. Дружественные функции и перегрузка операций.
- •19. Перегрузка new, delete.
- •Void *operator new (size_f size);
- •Void operator delete (void *); //void * - указатель на область памяти, //выделяемую под объект
- •20. Преобразование типов, определяемых пользователем с помощью конструкторов и операций преобразования.
- •22. Друзья-функции и друзья-классы
- •24. Производные классы. Базы прямые, непрямые
- •25. Конструкторы, деструкторы и наследование
- •26. Множественное наследование
- •27. Виртуальные базовые классы. Иерархия классов. Виртуальные функции
- •Virtual void draw();
- •Void draw();
- •28. Полиморфизм
- •29. Абстрактные классы и чистые виртуальные функции.
- •30. Заголовочные файлы. Предопределенные объекты и потоки.
- •31. Операции помещения и извлечения. Манипуляторы
- •Int main()
- •33. Конструкторы файловых потоков. Ввод-вывод в файлы.
- •34 Параметризированные типы и функции
- •35 Шаблоны функций. Параметры шаблонов. Шаблоны классов
- •36. Контейнеры. Итераторы
- •37. Использование assert, кодов возврата, сигналов, setjmp и longjmp.
- •38. Объектно-ориентированная обработка исключений. Применение try, catch, throw.
36. Контейнеры. Итераторы
Контейнер в программировании — структура, позволяющая инкапсулировать в себя объекты разных типов.
К наиболее популярным типам классов относятся классы, контейнеры (называемые также классы совокупностей), т.е. классы, спроектированные для хранения в них совокупностей объектов.
Контейнеры хранят данные, а алгоритмы оперируют ими позволяя сократить объем библиотеки.
Одним из важных понятий библиотеки наряду с контейнером и родовым алгоритмом является итератор – класс, объекты которого обеспечивают доступ к компонентам контейнера. Итератор обобщает понятие указателя, позволяет перебирать компоненты контейнера. Итератор может указывать на конкретный компонент.
Контейнеры подразделяются на два основных семейства:
последовательные (векторы, списки, двусторонние очереди – их элементы упорядочиваются операциями вставки и удаления;
множества, мультимножества, отображения, мультиотображения.
Контейнер отображения является ассоциативным классом, ему необходимо, чтобы была определена операция сравнения элементов.
Интерфейсы типичных контейнеров включают
1) конструкторы;
2) доступ к элементу;
3) вставка элемента;
4) удаление элемента;
5) деструкторы;
6) итераторы.
double sum(const deque <double>& dq) //dq – контейнер
{
deque<double>::const _iterator p;
double s=0.0;
for(p=dq, begin(); p!=dq.end(); ++p)
…
return s;
}
Проход по контейнеру dq происходит с помощью константного итератора p. Для получения очередного элемента контейнера операторы разыменовываются, итератор begin() указывает на первый элемент контейнера, end() – на конец последнего элемента.
Контейнерные функции:
CAN :: value_type
CAN :: reference //тип ссылки на элемент
CAN :: const_reference //тип константной ссылки
CAN :: pointer //тип указателя на элемент
CAN :: iterator //тип итератора
CAN :: const_iterator //тип константного итератора
CAN :: reverse_iterator //тип обратного итератора
CAN :: differnce_type //тип расстояния между элементами
CAN :: size_type //тип размера контейнера
Эти определения доступны во всех контейнерных классах, например, vector <char> :: value_type – т. обр. будут сообщаться символьные значения, а проход по такому контейнеру будет выполнен посредством итератора.
vector <char> :: iterator
Список стандартных методов любого контейнерного класса:
CAN() – конструктор по умолчанию;
CAN(c) – конструктор копирования;
c.begin() – начальная позиция контейнера;
c.end() – конечная позиция контейнера;
c.rend() – конечная позиция обратного контейнера;
c.rbegin() – начальная позиция обратного контейнера;
c.size() – число элементов;
c.max_size() – максимально возможный размер;
c.empty() – истина, если c пуст;
c.swap(d) – обмен элементами между c и d.
Существует 5 категорий итераторов: для записи / для чтения, однонаправленные, двунаправленные, произвольного доступа.
Эти ↑ категории итераторов представляют собой интерфейсы, обеспечивающие операции для итераторов конкретного направления. Т.бор., многие несвязанные типы итераторов могут относиться к одной категории, например, указатели относятся к операторам с произвольным досупом. Итератор с произвольным доступом может использоваться векторами, но не списками.
Итераторы для чтения поддерживают операции равенства, константного разыменования, автоинкременты (специальным типом такого итератора является istream_iterator). Итератор для записи поддерживает операции равенства, константного разыменования, автоинкременты (специальный тип такого итератора – ostream_iterator).
Однонаправленные поддерживают все операции итераторов чтения и записи, позволяют применять присваивание, т.е. сохранить позицию внутри контейнера при многократных подходах.
Двунаправленные поддерживают все операции однонаправленных итераторов и автодекременту.