- shrink_to_fit方法
- 简述:
shrink_to_fit
请求容器减小其容量以匹配其当前大小。这并不保证容量一定会减小到与大小相同,但会尽量减少不必要的内存占用。
- 应用场景:当你明确知道不再需要额外的预分配空间,且希望尽可能减少内存占用时使用。例如,在处理完大量数据后,数据量稳定下来,且不再需要预分配的额外空间,此时调用
shrink_to_fit
可以释放部分未使用的内存。
- 示例代码:
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec;
for (int i = 0; i < 1000; ++i) {
vec.push_back(i);
}
// 此时vec可能有额外的预分配空间
std::cout << "Before shrink_to_fit, capacity: " << vec.capacity() << ", size: " << vec.size() << std::endl;
vec.shrink_to_fit();
std::cout << "After shrink_to_fit, capacity: " << vec.capacity() << ", size: " << vec.size() << std::endl;
return 0;
}
- reserve相关操作
- 简述:
reserve
用于预先分配指定数量的元素空间,以避免多次重新分配内存。如果想收缩容量,可以先resize
到合适大小,然后再调用reserve
为resize
后的大小,这样可以调整容量。例如vec.resize(new_size); vec.reserve(new_size);
- 应用场景:当你能够预估数据量的大致上限,并且希望在数据量减少到一定程度后,减少内存占用时使用。比如在一个动态加载数据的系统中,开始加载了较多数据,后来数据量明显减少,且你能预估新的较小的上限,就可以用这种方法调整容量。
- 示例代码:
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec;
for (int i = 0; i < 1000; ++i) {
vec.push_back(i);
}
int new_size = 100;
vec.resize(new_size);
vec.reserve(new_size);
std::cout << "After resize and reserve, capacity: " << vec.capacity() << ", size: " << vec.size() << std::endl;
return 0;
}