std::basic_string<CharT,Traits,Allocator>::shrink_to_fit
void shrink_to_fit(); | (constexpr с C++20) |
Запрашивает удаление неиспользуемой ёмкости.
Это необязательный запрос на уменьшение capacity() до size(). Выполнение запроса зависит от реализации.
Если (и только если) происходит перераспределение памяти, все указатели, ссылки и итераторы становятся недействительными.
Сложность
Линейная относительно размера строки.
Примечания
В libstdc++ shrink_to_fit() недоступен в режиме C++98.
Пример
#include <iostream>
#include <string>
int main()
{
std::string s;
std::cout << "Size of std::string is " << sizeof s << " bytes\n"
<< "Default-constructed capacity is " << s.capacity()
<< " and size is " << s.size() << '\n';
for (int i = 0; i < 42; i++)
s.append(" 42 ");
std::cout << "Capacity after 42 appends is " << s.capacity()
<< " and size is " << s.size() << '\n';
s.clear();
std::cout << "Capacity after clear() is " << s.capacity()
<< " and size is " << s.size() << '\n';
s.shrink_to_fit();
std::cout << "Capacity after shrink_to_fit() is " << s.capacity()
<< " and size is " << s.size() << '\n';
}
Возможный вывод:
GCC output: Size of std::string is 32 bytes Default-constructed capacity is 15 and size 0 Capacity after 42 appends is 240 and size 168 Capacity after clear() is 240 and size 0 Capacity after shrink_to_fit() is 15 and size 0 clang output (with -stdlib=libc++): Size of std::string is 24 bytes Default-constructed capacity is 22 and size is 0 Capacity after 42 appends is 191 and size is 168 Capacity after clear() is 191 and size is 0 Capacity after shrink_to_fit() is 22 and size is 0
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены задним числом к ранее опубликованным стандартам C++.
| DR | Применён к | Поведение согласно опубликованной версии | Корректное поведение |
|---|---|---|---|
| LWG 755 | C++98 |
std::string не имел явных операций сокращения до требуемого размера | добавлены |
| LWG 2223 | C++98 | 1. ссылки, указатели и итераторы не становились недействительными 2. требования к сложности отсутствовали | 1. они могут стать недействительными 2. требуется линейная сложность |
См. также
| возвращает количество символов (открытая функция-член) |
|
| возвращает количество символов, которое может храниться в выделенной в данный момент памяти (открытая функция-член) |
|
| изменяет количество хранящихся символов (открытая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/string/basic_string/shrink_to_fit