Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VC_Lect.doc
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
15 Мб
Скачать
☆

20.5.Использование контейнера vector

Контейнер vector, в отличие от классов CArray, CList и CMap библиотеки MFC, относится к средствам стандартной библиотеки языка С++ и его надо рассматривать как альтернативу CArray. Использование vector однозначно целесообразно в приложениях, которые предполагается использовать на разных программных платформах.

Класс vector представляет собой шаблонный класс для последовательных контейнеров, которые манипулируют элементами данного типа в линейной последовательности (in a linear arrangement) и позволяют быстрый произвольный доступ к любому элементу. Классы на основе этого шаблона являются наиболее предпочтительными контейнерами для наборов элементов, к которым требуется иметь высокоэффективный произвольный доступ.

Объявление шаблона:

template <

class Type,

class Allocator = allocator<Type>

>

class vector

Параметры шаблона:

Type

Тип элементов, сохраняемых в векторе

Allocator

Тип, который представляет собой объект, предназначенный для управления распределением памяти для вектора. Этот параметр не является обязательным и его можно не указывать. Значение параметра по умолчанию – allocator<Type>.

Замечания.

Операции добавления элементов вектора в его конец, равно как и удаления его последних элементов требуют минимального времени и выполняются эффективно, в то время как выполнение таких операций применительно к элементам в середине вектора требуют больших затрат времени. Эффективное выполнение операций с элементами вектора, находящимися в его начале или конце, обеспечивает контейнер deque. Наконец, контейнер list наиболее предпочтителен для тех задач, где требуется вставлять и удалять элементы в/из любого места последовательности.

Перераспределение памяти для вектора происходит тогда, когда необходимо увеличить размер вектора по сравнению с текущим. Вставки и удаления элементов вектора могут изменить адреса их размещения внутри последовательности. Во всех таких случаях итераторы или ссылки, которые указывают на изменившиеся части последовательности, становятся ошибочными и их значения надо обновить. Если перераспределения памяти не было, то итераторы и ссылки перед выполнением вставок или удалений порций вектора остаются действительными.

Класс vector<bool> представляет собой полную специализацию (full specialization) шаблонного класса для элементов булевского типа с распределителем памяти, используемым специализацией для базового типа.

Описания типов (Typedefs) класса vector представлены в табл.1, компонентные функции – в табл.2, операции – в табл. 3.

Таблица 1

Описания типов класса vector

Имя типа

Описание назначения

allocator_type

Тип класса распределителя памяти для объектов вектора

const_iterator

Тип, представляющий собой итератор произвольного доступа, который может читать константные элементы вектора

const_pointer

Тип, представляющий указатель на константный элемент вектора

const_reference

Тип, представляющий ссылку на константный элемент вектора и используемый для чтения и выполнения константных операций

const_reverse_iterator

Тип, представляющий собой итератор произвольного доступа, который может читать любые константные элементы «реверсированного» вектора

difference_type

Тип, представляющий разность адресов двух элементов вектора

iterator

Тип, представляющий собой итератор произвольного доступа, который может читать или модифицировать любые элементы вектора

pointer

Тип, представляющий указатель на элемент вектора

reference

Тип, представляющий ссылку на элемент вектора, т.е. на value_type

reverse_iterator

Тип, представляющий собой итератор произвольного доступа, который может читать или модифицировать любые элементы реверсированного вектора

size_type

Беззнаковый целочисленный тип, представляющий объект, который представляет длину любой последовательности

value_type

Тип данных элементов вектора

Таблица 2

Компонентные функции класса vector

Имя функции

Назначение функции

assign

Очищает вектор и копирует указанные элементы в пустой вектор

at

Возвращает ссылку на элемент в указанной позиции вектора

back

Возвращает ссылку на последний элемент вектора

begin

Возвращает итератор произвольного доступа, указывающий на первый элемент вектора

capacity

Возвращает число элементов, которые вектор может содержать без распределения дополнительной памяти

clear

Удаляет все элементы вектора

empty

Возвращает значение true, если вектор пустой

end

Возвращает итератор произвольного доступа, указывающий на элемент вектора, следующий за последним

erase

Удаляет один или несколько элементов вектора, начиная с указанной позиции

front

Возвращает ссылку на первый элемент вектора

get_allocator

Возвращает объект, который используется классом вектор для распределения памяти

insert

Вставляет один или несколько элементов вектора, начиная с указанной позиции

max_size

Возвращает максимально возможное число элементов вектора

pop_back

Удаляет последний элемент вектора, который не должен быть пустым

push_back

Добавляет элемент в конец вектора

rbegin

Возвращает итератор произвольного доступа, указывающий на первый элемент реверсированного вектора

rend

Возвращает итератор произвольного доступа, указывающий на элемент, следующий за последним элементом реверсированного вектора

resize

Устанавливает новую длину вектора и заполняет новые элементы заданным значением

reserve

Резервирует минимальную длину вектора

size

Возвращает число элементов вектора

swap

Обменивает содержимое двух векторов друг с другом

vector

Перегруженные конструкторы, предназначенные для создания вектора

Таблица 3

Перегруженные операции класса vector

operator[]

Возвращает ссылку на элемент вектора в указанной позиции

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]