Spec-Zone.ru › C++

std::vector<T,Allocator>::shrink_to_fit

void shrink_to_fit();
(до C++20)
constexpr void shrink_to_fit();
(с C++20)

Запрашивает удаление неиспользуемого объёма памяти.

Это необязательное требование по уменьшению capacity() до size(). Выполнение запроса зависит от реализации.

Если происходит перевыделение памяти, все итераторы (включая итератор end()) и все ссылки на элементы становятся недействительными. Если перевыделение не происходит, итераторы и ссылки не становятся недействительными.

Параметры

(нет)

Требования к типу
-T должен удовлетворять требованиям MoveInsertable в *this. (с C++11)

Значение результата

(нет)

Сложность

Максимально линейная от размера контейнера.

Исключения

Если исключение выбрасывается, кроме случая выбрасывания исключения конструктором перемещения для не-CopyInsertable T, никаких последствий не возникает.

(с C++11)

Примечания

В libstdc++, shrink_to_fit() не доступен в режиме C++98.

Пример

#include <iostream>
#include <vector>
 
int main()
{
    std::vector<int> v;
    std::cout << "Default-constructed capacity is " << v.capacity() << '\n';
    v.resize(100);
    std::cout << "Capacity of a 100-element vector is " << v.capacity() << '\n';
    v.resize(50);
    std::cout << "Capacity after resize(50) is " << v.capacity() << '\n';
    v.shrink_to_fit();
    std::cout << "Capacity after shrink_to_fit() is " << v.capacity() << '\n';
    v.clear();
    std::cout << "Capacity after clear() is " << v.capacity() << '\n';
    v.shrink_to_fit();
    std::cout << "Capacity after shrink_to_fit() is " << v.capacity() << '\n';
    for (int i = 1000; i < 1300; ++i)
        v.push_back(i);
    std::cout << "Capacity after adding 300 elements is " << v.capacity() << '\n';
    v.shrink_to_fit();
    std::cout << "Capacity after shrink_to_fit() is " << v.capacity() << '\n';
}

Возможный вывод:

Default-constructed capacity is 0
Capacity of a 100-element vector is 100
Capacity after resize(50) is 100
Capacity after shrink_to_fit() is 50
Capacity after clear() is 50
Capacity after shrink_to_fit() is 0
Capacity after adding 300 elements is 512
Capacity after shrink_to_fit() is 300

Отчёты о дефектах

Следующие отчёты о дефектах, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применено к Поведение как опубликовано Правильное поведение
LWG 755 C++98 std::vector не имело явных операций shrink-to-fit предоставлено
LWG 2033 C++11 1. T не требовалось быть MoveInsertable
2. требование к сложности отсутствовало
1. требуется
2. добавлено

См. также

size
возвращает количество элементов
(публичный член-функция)
capacity
возвращает количество элементов, которое может храниться в текущем выделенном хранилище
(публичный член-функция)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/container/vector/shrink_to_fit

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API