std::hive<T,Allocator>::shrink_to_fit
void shrink_to_fit(); | (начиная с C++26) |
Запрашивает уменьшение capacity() с приближением к size().
Это необязательный к выполнению запрос на уменьшение использования памяти без изменения размера hive. Выполнение запроса зависит от реализации.
Может уменьшить (но не увеличить) ёмкость и может перераспределить элементы. Если ёмкость уже равна размеру, ничего не происходит.
При перераспределении порядок элементов в *this может измениться, а все ссылки и итераторы (включая end()), указывающие на элементы в *this, становятся недействительными.
Если T не удовлетворяет требованиям MoveInsertable для std::hive<T, Allocator>, поведение не определено.
Сложность
Если происходит перераспределение, линейная от размера hive.
Исключения
Если при выделении памяти для нового блока элементов выбрасывается исключение, ёмкость может уменьшиться и может произойти перераспределение. В противном случае, если выбрасывается исключение, последствия не определены.
Если выбрасывается исключение, порядок элементов в *this не определён.
Пример
#include <hive>
#include <print>
int main()
{
std::hive<int> hive;
std::println("Default-constructed capacity is {}", hive.capacity());
hive.insert(100, 0);
std::println("Capacity after inserting 100 elements is {}", hive.capacity());
for (auto i{0}; i != 42; ++i)
hive.erase(hive.begin());
std::println("Capacity after erasing 42 elements is {}, size is {}",
hive.capacity(), hive.size());
hive.shrink_to_fit();
std::println("Capacity after shrink_to_fit() is {}", hive.capacity());
}
Возможный вывод:
Default-constructed capacity is 0 Capacity after inserting 100 elements is 100 Capacity after erasing 42 elements is 100, size is 58 Capacity after shrink_to_fit() is 76
См. также
| освобождает зарезервированные блоки и соответствующим образом уменьшает ёмкость (открытая функция-член) |
|
| возвращает количество элементов, которое может храниться в выделенной в данный момент памяти (открытая функция-член) |
|
| возвращает количество элементов (открытая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/hive/shrink_to_fit