c++ - 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();
解决方案
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();
这仅修改了一个临时对象并且没有其他副作用,因此这实际上相当于一个空语句,假设它已被优化。