Пространства имён
Варианты
Действия

std::basic_string<CharT,Traits,Allocator>::shrink_to_fit

Материал из cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
Функции-элементы
Доступ к элементам
Итераторы
Ёмкость
basic_string::shrink_to_fit
(DR*)
Операции
Поиск
Константы
Правила вывода(C++17)
Функции, не являющиеся элементами
Ввод/Вывод
Сравнение
(до C++20)(до C++20)(до C++20)(до C++20)(до C++20)(C++20)
Числовые преобразования
(C++11)(C++11)(C++11)
(C++11)(C++11)
(C++11)(C++11)(C++11)
(C++11)
(C++11)
Вспомогательные классы
 
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 функция-элемент)[править]
close