命名空间
变体
操作

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

来自 cppreference.com
< cpp‎ | container‎ | vector
 
 
 
 
void shrink_to_fit();
(从 C++20 开始为 constexpr)

请求移除未使用的容量。

这是一个非强制性请求,旨在将 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++ 标准。

DR 应用于 发布的行为 正确行为
LWG 755 C++98 std::vector 缺乏显式的收缩到适应操作 已提供
LWG 2033 C++11 1. T 不需要是 MoveInsertable
2. 缺少复杂度要求
1. 已要求
2. 已添加

[编辑] 另请参阅

返回元素数量
(公有成员函数) [编辑]
返回当前分配的存储空间中可以容纳的元素数量
(公有成员函数) [编辑]