std::basic_string<CharT,Traits,Allocator>::shrink_to_fit — cppreference.com
Материал из cppreference.com
<tbody> </tbody> <tbody class="t-dcl-rev "> </tbody><tbody> </tbody>
|
|
(до C++20) | |
|
|
(начиная с 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 функция-элемент) [править] |