Последовательными контейнерами () в языке программирования C++ считаются несколько предопределённых шаблонных типов данных стандартной библиотеки STL, которые обеспечивают упорядоченный способ хранения своих элементов. Каждый из элементов такого контейнера имеет определённую позицию, которая зависит от времени и места помещения его в контейнер, но не зависит от значения элемента. Как правило, к последовательным контейнерам относятся списки, вектора, очереди двустороннего доступа, массивы (начиная со стандарта C++11) и ряд других. Обычно их реализуют на практике в виде связанного списка или массива.

Описание Все основные стандартные классы-контейнеры библиотеки STL подразделяются на последовательные и ассоциативные контейнеры. Ключевое отличие последовательных контейнеров от ассоциативных заключается в том, что при помещении элемента в последовательный контейнер он остаётся там, где его разместили, а в ассоциативном он перемещается туда, где ему положено находиться в соответствии со внутренним устройством контейнера.

Традиционно в категорию стандартных последовательных контейнеров входят массивы array, списки (как односвязные forward_list, так и двусвязные list), динамические вектора vector и очереди dequeContainers www.cplusplus.comContainers in C++ STL www.geeksforgeeks.org. Иногда в их состав также включают строки string, а к нестандартным последовательным контейнерам относят списки slist и строковые данные rope.

Требования к элементам Основная технологическая оснастка библиотеки STL (контейнеры, итераторы, алгоритмы) реализована в виде шаблонных классов. Как следствие, эта инфраструктура может одинаково эффективно обрабатывать как встроенные, так и пользовательские типы данных. Тем не менее, все элементы всех контейнеров библиотеки STL должны подчиняться ряду достаточно общих требований. Во-первых, они должны быть перемещаемыми и копируемыми. Во-вторых, к ним должно быть допустимо применение операции присваивания. В-третьих, для их уничтожения должен быть доступен деструктор. В дополнение к этим требованиям ряд последовательных контейнерных классов требует наличия конструктора по умолчанию, а в некоторых методах может потребоваться определённая операция сравнения на равенство operator==() для элементов.

Базовая функциональность

С основными последовательными контейнерами связан набор стандартных операций, поддерживаемых всеми классами библиотеки STL для унифицированного доступа к своим элементам.

Название Функции + Объединение элементов += Добавление элементов в контейнер << Добавление элемента в контейнер at() Доступ к произвольному элементу front() и first() Предоставляют ссылку на первый элемент в предположении, что он существует. Использование метода front() предпочтительнее по стандарту STL. back() и last() Предоставляют ссылку на последний элемент в предположении, что он существует. Использование метода back() предпочтительнее по стандарту STL. contains() Проверка контейнера на наличие переданного элемента erase() Удаляет элемент, на который указывает параметр-итератор IndexOf() Возвращает индекс первого элемента, который соответствует значению переданного параметра. pop_front() Удаляет из контейнера первый элемент pop_back() Удаляет из контейнера последний элемент replace() Заменяет значение элемент контейнера на значение своего параметра push_front() и prepend() Добавляют элемент в начало контейнера. Использование метода push_front() предпочтительнее по стандарту STL. push_back() и append() Добавляют элемент в конец контейнера. Использование метода push_back() предпочтительнее по стандарту STL.

В дополнение к ним важной операцией считается функция resize(), которая позволяет динамически варьировать количество элементов в коллекции за линейное время. Её поддерживают все классы, за исключением массива array, который идеологически не предназначен для изменений своего размера в памяти.

Примечания

Источники

Категория:Библиотеки C++ Категория:Структуры данных