Стандартные контейнеры.


Стандартная библиотека включает в себя 10 стуктур данных контейнеров в виде шаблонов классов. Контейнеры автоматически настраиваются на любой нужный нам тип размещаемых в них данных. Для получения доступа к кон¬тейнеру необходимо создать экземпляры одного или нескольких иттераторов типа iterator класса. 
Благодаря иттераторам контейнеры имеют более универсальную природу. В них можно размещать объекты, указа¬тели на них или даже другие контей¬неры для создания многоуровневых структур.
Список шаблонов
1. vector – линейная последовательность (аналогична массиву в C++);
2. list – двухсвязный список;
3. deque – очередь с двусторонним доступом;
4. set – ассоциативный массив уникальных ключей.
5. multiset – ассоциативный массив с возможностью дублирования ключей и значений;
6. map — ассоциативный массив с уникальными ключами и значениями.
7. stack – cтруктура данных “последний вошел — первый вышел ”;
8. queue — cтруктура данных “ первый вошел — первый вышел ”;
9. priority_queue – вектор или очередь упорядоченная по критичемким событиям.
Правила и рекомендации относительно контейнеров.
1. Контейнер может содержать любой тип данных, включая базовые объекты, подобные целым и числам двойной точности, строкам, структурам, объектов классов и указателей.
2. Конструк. копии объекта обратывают его помещение в контейнер. Перегружая оператор присваивания и обеспечивая конструктор копией, мы получаем полный контроль над вставками в контейнер.
3. Контейнер автоматически выделяет и освобождает память, необходимую для хранения объекта.
4. Вектор может рассматриваться для размещения новых данных, но не может автоматически уменьшаться в размерах. Другие контейнеры, подобные спискам, декам и множ. могут расти и уменьшаться по мере необходимости.
5. Когда программа уничтожает контейнер, тот сперва уничтожает какой-нибудь деструктор для принадлежащих ему объектов, поэтому можно уничтожить контейнер без предварительного уничтожения его содержимого.
6. Предыдущее правило не работает, если контейнер содержит указатели на объекты. В этом случае мы сами отвечаем за уничтожение адресуемых объектов или освобождения выделенной памяти.

Загрузка...