Глава 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 () иллюстрируются следующим фрагментом: