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

来自cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
成员函数
元素访问
迭代器
容量
basic_string::shrink_to_fit
操作
搜索
常量
推导指引 (C++17)
非成员函数
I/O
比较
(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 前)
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 << "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 输出:
std::string 的大小是 32 个字节
默认构造后的容量是 15,大小是 0
后附 42 次后的容量是 240,大小是 168
clear() 后的容量是 240,大小是 0
shrink_to_fit() 后的容量是 15,大小是 0
 
clang 输出(-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 缺少显式的移除未使用的容量的操作 已提供

参阅

返回字符数
(公开成员函数)
返回当前对象分配的存储空间能保存的字符数量
(公开成员函数)