首页 > 解决方案 > std::vector 的 swap 和 shrink_to_fit() 的不同之处

问题描述

众所周知,swap()可以释放vector的内存,但shrink_to_fit()也可以这样做。这样对吗?

vector<int> nums; 
nums.push_back(1);
nums.push_back(1);
nums.push_back(2);
nums.push_back(2); 

vector<int>().swap(nums);
vector<int>().shrink_to_fit();

标签: c++vector

解决方案


vector<int>().swap(nums);

这实际上等同于(尽管不保证是这样)

nums.clear();
nums.shrink_to_fit();

我建议写后者,因为它更容易阅读。在引入 shrink_to_fit 之前使用了交换技巧。

swap() 可以释放vector的内存,

交换本身不会释放内存。释放内存的是临时对象的析构函数。

vector<int>().shrink_to_fit(nums);

这是病态的。

vector<int>().shrink_to_fit();

这仅修改了一个临时对象并且没有其他副作用,因此这实际上相当于一个空语句,假设它已被优化。


推荐阅读