std::vector<T,Allocator>::shrink_to_fit
来自cppreference.com
void shrink_to_fit(); |
(C++20 前) | |
constexpr void shrink_to_fit(); |
(C++20 起) | |
请求移除未使用的容量。
它是减少 capacity() 到 size()非强制性请求。请求是否达成依赖于实现。
如果发生重分配,那么所有迭代器,包含 end() 迭代器,和所有到元素的引用都会失效。如果没有发生重分配,那么没有迭代器或引用会失效。
参数
(无)
类型要求 | ||
-T 必须符合可移动插入 (MoveInsertable) 到 *this 中的要求。(C++11 起)
|
返回值
(无)
复杂度
至多与容器大小成线性。
异常如果不可复制插入 (CopyInsertable) 的 |
(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. 已添加 |
参阅
返回容纳的元素数 (公开成员函数) | |
返回当前存储空间能够容纳的元素数 (公开成员函数) |