Динамические массивы

В предыдущей главе мы научились создавать пользовательские шаблонные классы. Даже если вы не будете создавать свои шаблонные классы, то уж с вероятностью 100% будете пользоваться готовыми шаблонными классами, входящими в состав стандартной библиотеки шаблонов (STL — Standard Template Library), которые реализуют различные структуры данных: динамические массивы, списки, очереди, словари, множества и др. Очень уж они удобны в использовании и полезны в большинстве случаев. STL является неотъемлемой частью стандартной библиотеки языка C++, поэтому ничего дополнительно устанавливать не придется.

Ранее мы рассматривали классы string и wstring, которые являются спецификациями шаблонного класса basic_string. Этот класс хотя и не является частью STL, но полностью совместим с этой библиотекой. Таким образом к классам string и wstring можно применять алгоритмы, имеющиеся в STL. Кроме того, объекты этих классов можно сохранить в других контейнерах.

В STL контейнеры делятся на три основных типа:

  • последовательные контейнеры. К этому типу относятся классы deque (двусторонняя очередь), list (двусвязный список) и vector (динамический массив);
  • ассоциативные контейнеры. К этому типу относятся классы map (ассоциативный массив, в котором каждому ключу соответствует одно значение), multimap (ассоциативный массив, в котором ключу может соответствовать несколько значений), set (множество, состоящее из уникальных элементов) и multiset (множество, в котором элементы могут повторяться);
  • контейнеры-адаптеры. К этому типу относятся классы priority_queue (очередь с приоритетами), queue (очередь) и stack (стек). Обратите внимание на то, что контейнеры-адаптеры не позволяют использовать итераторы.

Почти все контейнеры являются динамическими. Это означает, что при добавлении нового элемента следить за размерами контейнера нет необходимости. Управление динамической памятью осуществляется автоматически с помощью распределителя памяти, который реализуется классом allocator. При создании объектов контейнера можно указать экземпляр класса, который реализует пользовательский распределитель памяти. Получить доступ к распределителю памяти через объект контейнера позволяет метод get_allocator(). Т. к. в большинстве случаев достаточно возможностей встроенного распределителя памяти мы не станем создавать собственные классы, а также рассматривать класс allocator. Чтобы получить подробные сведения по этим вопросам обращайтесь к документации.

Вспомогательные средства

Прежде чем изучать структуры данных, вначале рассмотрим вспомогательные средства: итераторы, функторы, инверторы, редакторы связей и адаптеры, а затем перейдем к контейнерам и алгоритмам.

Учебник C++ (MinGW-W64)
Учебник C++ (MinGW-W64) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов