Spec-Zone.ru › C++

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

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 << "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 не имело явных операций сжатия до размера предоставлено

См. также

sizelength
возвращает количество символов
(публичный член-функция)
capacity
возвращает количество символов, которые могут быть размещены в текущем выделенном хранилище
(публичный член-функция)
resize
изменяет количество хранимых символов
(публичный член-функция)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/string/basic_string/shrink_to_fit

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API