Типы последовательных контейнеров в C++
В стандартной библиотеке C++ для управления наборами объектов существуют контейнеры. Таким образом, можно сказать, что контейнер -- это коллекция объектов определенного типа. Если же мы говорим о последовательном контейнере (sequential container), то он дает возможность контролировать порядок, в котором существующие элементы располагаются в коллекции, причем не только контролировать, но и управлять доступом к данным элементам.
Рассмотрим типы последовательных контейнеров:
- vector. Это массив переменного размера, поддерживающий произвольный доступ к любому элементу контейнера. Существует возможность добавлять и удалять элементы из любого места контейнера.
- deque. Представляет собой двустороннюю очередь, поддерживает доступ к любому элементу контейнера. Существует возможность добавлять и удалять элементы в начале и конце.
- list. Это двусвязный список, который поддерживает лишь последовательный 2-направленный доступ к элементам. Можно добавлять и удалять элементы в начале и конце контейнера.
- forward_list. Представляет собой односвязный список, который поддерживает лишь последовательный однонаправленный доступ к элементам контейнера. Удалять элементы можно в начале и конце.
- array. Это уже массив фиксированного размера, поддерживающий произвольный доступ фактически к любому элементу контейнера, однако в данном случае удалять/добавлять элементы нельзя.
- string. Этот контейнер аналогичен вектору, состоящему из символов, то есть речь идет о строке.
Итак, стандартная библиотека C++ по дефолту включает в себя ряд контейнеров, представляющих определенные структуры данных. При этом все они имеют и общие, и специфические возможности. Также кроме класса array они все поддерживают добавление/удаление элементов. Главное отличие лишь в том, каким образом это добавление/удаление обеспечивается, а также как происходит доступ к существующим элементам. Соответственно, контейнер подбирается с учетом конкретной ситуации и потребностей.
Чтобы воспользоваться каким-нибудь контейнером, необходимо добавить в программу соответствующий заголовочный файл, который принято называть именем класса контейнера.
Также в момент определения переменной контейнера надо установить ограничение на тип элементов, которые будут в этот контейнер включены. Тип элементов следует передавать в угловых скобках. Ниже пример с определением переменной класса vector, которая сохраняет числовые данные int-типа:
Остается добавить, что в случае компиляции программы, использующей контейнеры, посредством компилятора g++, может возникнуть необходимость в указании флага -static:
По материалам https://metanit.com/.