26 Containers library [containers]

26.3 Sequence containers [sequences]

26.3.11 Class template vector [vector]

26.3.11.3 vector capacity [vector.capacity]

size_type capacity() const noexcept;

Returns: Общее количество элементов, которые вектор может содержать без необходимости перераспределения.

void reserve(size_type n);

Requires: T должен быть MoveInsertable в *this.

Effects: Директива, которая информирует vector о планируемом изменении размера, чтобы он мог соответствующим образом управлять распределением хранилища. После того, какreserve(), capacity() больше или равен аргументу ,reserve если Перераспределение происходит; и равно предыдущему значению в capacity() противном случае. Перераспределение происходит в этот момент тогда и только тогда, когда текущая емкость меньше аргумента reserve(). Если исключение выбрасывается не конструктором перемещения не-CopyInsertable типа, не будет никаких эффектов.

Complexity: Он не изменяет размер последовательности и занимает самое большее линейное время в размере последовательности.

Throws: length_­error если n > max_­size().260

Remarks: Перераспределение делает недействительными все ссылки, указатели и итераторы, относящиеся к элементам в последовательности. Никакое перераспределение не должно происходить во время вставок, которые происходят после вызова, reserve() до того момента, когда вставка сделает размер вектора больше, чем значение capacity().

void shrink_to_fit();

Requires: T должен быть MoveInsertable в *this.

Effects: shrink_­to_­fit является необязательным запросом для сокращения capacity() до size(). [ Note: Запрос не является обязывающим, чтобы дать свободу для оптимизации, зависящей от реализации. ] Он не увеличивается , но может уменьшаться , вызывая перераспределение. Если исключение вызвано другим, чем конструктором перемещения объекта non- , никаких эффектов не возникает. end note capacity() capacity()CopyInsertable T

Complexity: Линейный по размеру последовательности.

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

void swap(vector& x) noexcept(allocator_traits<Allocator>::propagate_on_container_swap::value || allocator_traits<Allocator>::is_always_equal::value);

Effects: Обмены содержания и capacity() о *this с у x.

Complexity: Постоянное время.

void resize(size_type sz);

Effects: Если sz < size(), стирает последние size() - sz элементы из последовательности. В противном случае добавляет sz - size() в последовательность элементы, вставленные по умолчанию.

Requires: T должно быть MoveInsertable и DefaultInsertable в *this.

Remarks: Если исключение вызвано другим, чем конструктором перемещения объекта non-CopyInsertable T , никаких эффектов не возникает.

void resize(size_type sz, const T& c);

Effects: Если sz < size(), стирает последние size() - sz элементы из последовательности. В противном случае добавляет к последовательности sz - size() копии c .

Requires: T должен быть CopyInsertable в *this.

Remarks: Если выбрано исключение, никаких эффектов нет.

reserve() использования, Allocator​::​allocate() которые могут вызвать соответствующее исключение.