Записки программиста
Авторский блог Михаила Лукина

vector::reserve



void reserve ( size_type n );

Запрос на изменение объема выделенной памяти.

Запрос на то, что объем выделенной для вектора памяти будет не меньше, чем n. Функия информирует вектор о планируемом увеличении размера. Если n больше текущего объема выделенной памяти, то функция предпринимает попытку перераспределения памяти. Таким образом, в случае успеха при выполнении вызовов vector::insert и vector::push_back не будет автоматического перераспределения памяти как минимум до тех пор, пока размер вектора не превысит n.

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

При любых обстоятельствах вызов reserve не влияет ни на элементы вектора ни на размер вектора (для изменения размера вектора см. функции vector::resize и vector::erase ).

Замечание. Если n больше, чем максимально возможный размер вектора (см. vector::max_size), то функция кидает исключение length_error.
В случае перераспределения памяти вызывается функция Allocator::allocate(), которая, в свою очередь, тоже может кидать исключения (распределитель памяти по умолчанию кидает исключение bad_alloc в случае неудачного выделения памяти).

 

Параметры

n
Новый объем вектора, исчисляемый в элементах. size_type - целый беззнаковый тип.

 

Возвращаемое значение

Нет.

 

Временная сложность

O(n), где n - объем выделенной памяти для вектора.

 

Версия для печати

© 2010-2014. Записки программиста. Все права защищены.
Яндекс.Метрика
ВебСтолица.РУ: создай свой бесплатный сайт!  | Пожаловаться  
Движок: Amiro CMS