std::basic_string<CharT,Traits,Allocator>::shrink_to_fit
Материал из cppreference.com
<tbody>
</tbody>
<tbody class="t-dcl-rev ">
</tbody><tbody>
</tbody>
void shrink_to_fit(); |
(до C++20) | |
constexpr void shrink_to_fit(); |
(начиная с C++20) | |
Запрашивает удаление неиспользуемой ёмкости.
Это необязательный запрос на уменьшение capacity() до size(). Будет ли выполнен запрос, зависит от реализации.
Если (и только если) происходит перераспределение, все указатели, ссылки и итераторы становятся недействительными.
Параметры
(нет)
Возвращаемое значение
(нет)
Сложность
|
(Не указана) |
(до C++17) |
|
Линейная по размеру строки. |
(начиная с C++17) |
Примечание
В libstdc++, shrink_to_fit() недоступна в режиме C++98.
Пример
Запустить этот код
#include <iostream>
#include <string>
int main()
{
std::string s;
std::cout << "Размер std::string равен " << sizeof s << " байтов\n"
<< "Установленная по умолчанию ёмкость составляет " << s.capacity()
<< " и размер равен " << s.size() << '\n';
for (int i = 0; i < 42; i++)
s.append(" 42 ");
std::cout << "Ёмкость после 42 добавлений равна " << s.capacity()
<< " и размер равен " << s.size() << '\n';
s.clear();
std::cout << "Ёмкость после clear() равна " << s.capacity()
<< " и размер равен " << s.size() << '\n';
s.shrink_to_fit();
std::cout << "Ёмкость после shrink_to_fit() равна " << s.capacity()
<< " и размер равен " << s.size() << '\n';
}
Возможный вывод:
GCC output:
Размер std::string равен 32 байтов
Установленная по умолчанию ёмкость составляет 15 и размер равен 0
Ёмкость после 42 добавлений равна 240 и размер равен 168
Ёмкость после clear() равна 240 и размер равен 0
Ёмкость после shrink_to_fit() равна 15 и размер равен 0
clang output (with -stdlib=libc++):
Размер std::string равен 24 байтов
Установленная по умолчанию ёмкость составляет 22 и размер равен 0
Ёмкость после 42 добавлений равна 191 и размер равен 168
Ёмкость после clear() равна 191 и размер равен 0
Ёмкость после shrink_to_fit() равна 22 и размер равен 0
Отчёты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
| Номер | Применён | Поведение в стандарте | Корректное поведение |
|---|---|---|---|
| LWG 755 | C++98 | В std::string не было явных операций сжатия по размеру
|
предоставлено |
Смотрите также
| возвращает количество символов (public функция-элемент) | |
| возвращает количество символов, которые могут храниться в выделенной в данный момент памяти (public функция-элемент) | |
| изменяет количество сохранённых символов (public функция-элемент) |