Глава 18. Классы-контейнеры_________________________________497

value_type конструктора по умолчанию. Вторая форма функции resize о принимает два аргумента: new__size и, если добавляются новые элементы, объект типа value _type для копирования.

empty о возвращает значение булевого типа, указывающее, есть ли в контейнере элементы, reserve () резервирует необходимую память для размещения контейнера с числом элементов, задаваемым аргументом типа size_t:ype. Многочисленные перераспределения памяти очень неэффективны. Часто бывает более рационально отвести для контейнера большой блок памяти, достаточный для ожидаемого числа элементов.

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

Индексная операция [] работает так же, как и для массивов стандартного языка С. В индексную операцию передается смещение от первого элемента. Неконстантная версия может быть использована в качестве левой части в операции присваивания, поскольку возвращаемым значением является ссылка.

! Предупреждение

Так же как и для массивов С, переданное значение индекса не проверяется. Выход индекса за границы диапазона может вызывать непредсказуемые результаты. Необходимо контролировать положение индекса в диапазоне, определяемом функциями-членами begin и end.

Функция-член at о выполняет то же действие, что и индексная операция. Следующий фрагмент иллюстрирует оба варианта:

if ( !(studentVector3[2] == studentVector3.at(2))) cout « "Быть такого не может!\п";

front () возвращает ссылку на первый элемент вектора, a back() — на последний.

push back () добавляет элементы в конец вектора, a pop_back() удаляет последний элемент:

sLudentVector2 .push back (STUDENT ("John Newton" ,3.4));

// Добавление элемента John Newton в конец

studentVector2.pop__back(); '

// Удаление элемента John Newton

insert () вставляет один или более элементов в позицию, определяемую итератором, который передается в функцию. Три формы insert () иллюстрируются следующим фрагментом: