说明

在STL中 vector和string 是比较特殊的,clear()之后是不会释放内存空间的,也就是size()会清零,但capacity()不会改变,需要手动去释放,说明 clear() 没有释放内存。
想释放空间的话,除了swap一个空string外,c++11里新加入的的std::basic_string::shrink_to_fit 也可以。

代码

注意string的swap清空方法为:string().swap(str);

vector的swap清空方法为:nums.swap(vector<int>());

#include <iostream>
#include <string>
 
int main()
{
	std::string s;
	std::cout << "Default-constructed capacity is " << s.capacity()
		<< " and size is " << s.size() << '\n';
	for (int i = 0; i < 42; i++)
		s.append(" 42 ");
	std::cout << "Capacity after a couple of appends is " << s.capacity()
		<< " and size is " << s.size()