std::basic_string<CharT,Traits,Allocator>::shrink_to_fit
Материал из cppreference.com
< cpp | string | basic string
void shrink_to_fit(); | (до C++20) | |
constexprvoid 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 функция-элемент) |