Типы последовательных контейнеров


Для управления наборами объектов в стандартной библиотеке C++ определены контейнеры. Контейнер представляет коллекцию объектов определенного типа. Последовательный же контейнер (sequential container) позволяет котроллировать порядок, в котором элементы располагаются в коллекции, и управлять доступом к этим элементам.

Типы последовательных контейнеров:

vector: массив переменного размера.

Поддерживает произвольный доступ к любому элементу в контейнере.

Обеспечивает добавление и удаление элементов из любого места контейнера.

deque: двусторонняя очередь.

Поддерживает произвольный доступ к любому элементу в контейнере.

Обеспечивает удаление и добавление элементов в начале и в конце контейнера.

list: двухсвязный список

Поддерживает только последовательный двухнаправленный доступ к элементам.

Обеспечивает удаление и добавление элементов в начале и в конце контейнера.

forward_list: односвязный список.

Поддерживает только однонаправленный последовательный доступ к элементам.

Обеспечивает удаление и добавление элементов в начале и в конце контейнера.

array: массив фиксированного размера.

Поддерживает произвольный доступ к любому элементу в контейнере.

Добавлять или удалять элементы из контейнера нельзя.

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

Таким образом, стандартная библиотека C++ по умолчанию содержит ряд контейнеров, которые представляют определенные структуры данных. Все они имеют как некоторые общие, так и специфические возможности. За исключением класса array все они поддерживают добавление и удаление элементов. Основное различие между ними состоит в том, как они обеспечивают добавление и удаление элементов, а также доступ к элементам в контейнере. И в зависимости от ситуации и потребностей можно использовать тот или иной тип контейнеров.

Для использования определенного контейнера в программу необходимо добавить соответствующий заголовочный файл, который, как правило, называется по имени класса контейнера.

Кроме того, при определении переменной контейнера необходимо установить ограничение на тип элементов, которые будет содержать контейнер. Тип элементов передается в угловых скобках. Например, определение переменной класса vector, которая хранит числовые данные типа int:

1
std::vector<int> v1;
При компиляции программы, которая использует контейнеры, с помощью компилятора g++ может потребоваться указать флаг -static:

g++ hello.cpp -o hello -static