std::vector<T,Allocator>::shrink_to_fit

来自cppreference.com
< cpp‎ | container‎ | vector

 
 
 
 
void shrink_to_fit();
(C++20 前)
constexpr void shrink_to_fit();
(C++20 起)

请求移除未使用的容量。

它是减少 capacity()size()非强制性请求。请求是否达成依赖于实现。

如果发生重分配,那么所有迭代器,包含 end() 迭代器,和所有到元素的引用都会失效。如果没有发生重分配,那么没有迭代器或引用会失效。

参数

(无)

类型要求
-
T 必须符合可移动插入 (MoveInsertable) *this 中的要求。(C++11 起)

返回值

(无)

复杂度

至多与容器大小成线性。

异常

如果不可复制插入 (CopyInsertable) T 的移动构造函数以外的操作抛出异常,那么没有效果。

(C++11 起)

注解

在 libstdc++ 中,shrink_to_fit() 不能在 C++98 模式中使用。

示例

#include <iostream>
#include <vector>
 
int main()
{
    std::vector<int> v;
    std::cout << "Default-constructed capacity is " << v.capacity() << '\n';
    v.resize(100);
    std::cout << "Capacity of a 100-element vector is " << v.capacity() << '\n';
    v.resize(50);
    std::cout << "Capacity after resize(50) is " << v.capacity() << '\n';
    v.shrink_to_fit();
    std::cout << "Capacity after shrink_to_fit() is " << v.capacity() << '\n';
    v.clear();
    std::cout << "Capacity after clear() is " << v.capacity() << '\n';
    v.shrink_to_fit();
    std::cout << "Capacity after shrink_to_fit() is " << v.capacity() << '\n';
    for (int i = 1000; i < 1300; ++i)
        v.push_back(i);
    std::cout << "Capacity after adding 300 elements is " << v.capacity() << '\n';
    v.shrink_to_fit();
    std::cout << "Capacity after shrink_to_fit() is " << v.capacity() << '\n';
}

可能的输出:

Default-constructed capacity is 0
Capacity of a 100-element vector is 100
Capacity after resize(50) is 100
Capacity after shrink_to_fit() is 50
Capacity after clear() is 50
Capacity after shrink_to_fit() is 0
Capacity after adding 300 elements is 512
Capacity after shrink_to_fit() is 300

缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
LWG 755 C++98 std::vector 缺少显式的移除未使用的容量的操作 已提供
LWG 2033 C++11 1. T 不需要可移动插入 (MoveInsertable)
2. 缺失了复杂度要求
1. 需要
2. 已添加

参阅

返回容纳的元素数
(公开成员函数)
返回当前存储空间能够容纳的元素数
(公开成员函数)