Курс ООП в С презентация. ООП в с++(полный курс). Объекты и классы
Скачать 1.76 Mb.
|
Контейнерные классыКонтейнеры — это объекты, содержащие другие однотипные объекты. Контейнерные классы являются шаблонными, поэтому хранимые в них объекты могут быть как встроенных, так и пользовательских типов. Эти объекты должны допускать копирование и присваивание. Встроенные типы этим требованиям удовлетворяют; то же самое относится к классам, если конструктор копирования или операция присваивания не объявлены в них закрытыми или защищенными. Контейнеры STL реализуют основные структуры данных, используемые при написании программ. При описании диаграмм классов на UML, объявления атрибутов-контейнеров могут использоваться в качестве спецификаторов ролей экземпляров классов в отношениях ассоциации или агрегации: Так, приведенный выше пример описывает, что накладная (экземпляр класса invoice) включает множество строк – экземпляров класса line посредством описанного в классе invoice атрибута Lines типа list class invoice { public: list }; Контейнерные классыОбобщенные алгоритмы реализуют большое количество процедур, применимых к контейнерам: поиск, сортировку, слияние и т. п. Однако они не являются методами контейнерных классов. Алгоритмы представлены в STL в форме глобальных шаблонных функций. Благодаря этому достигается универсальность: эти функции можно применять не только к объектам различных контейнерных классов, но также и к массивам. Независимость от типов контейнеров достигается за счет косвенной связи функции с контейнером: в функцию передается не сам контейнер, а пара указателей (first и last), задающая диапазон обрабатываемых элементов. Реализация указанного механизма взаимодействия базируется на использовании итераторов. Итераторы представляют собой обобщение концепции указателей и служат, как мы рассмотрели ранее, для обращения к элементам контейнера и последовательного продвижения по нему. Контейнерные классыСтроки Строка является классом, который хранит символы и предоставляет операции, такие как доступ по индексу, конкатенацию и сравнение, которые мы обычно связываем с понятием "строка". Стандартная библиотека для реализации строк предоставляет шаблон класса basic_string, с помощью которого определён тип string, представляющий собой синоним для basic_string typedef basic_string Тип basic_string похож на vector, который мы рассмотрим далее, за исключением того, что basic_string вместо набора операций со списками, которые предлагает vector, обеспечивает некоторые типовые операции со строками, такие как поиск подстрок. В качестве типа своих элементов строка может использовать любой тип, причём эффективность кода может улучшиться при отсутствии операции копирования, определяемой пользователем, в типе символов. basic_string int_str1 = 9876; basic_string int_str1+=5432; int_str1+=1098; int_str2=7654; int_str1.append(int_str2); while (si != int_str1.end()) cout << *si << endl; si++; Контейнерные классыКонтейнеры Последовательные контейнеры обеспечивают хранение конечного количества однотипных объектов в виде непрерывной последовательности. К базовым последовательным контейнерам относятся
списки (list); двусторонние очереди (deque). Кроме них, существуют специализированные контейнеры (или адаптеры контейнеров), реализованные на основе базовых : стеки (stack); очереди (queue) ; очереди с приоритетами (priority_queue). Ассоциативные контейнеры обеспечивают быстрый доступ к данным по ключу. Эти контейнеры построены на основе сбалансированных деревьев. Существует пять типов ассоциативных контейнеров: словари (mар); словари с дубликатами (multimap); множества (set); множества с дубликатами (multiset); битовые множества (bitset). Контейнерные классы#include |