vector<string> 内存无法释放
问题1:vector<string> 连续push_back 100000个字符串 ,然后clear掉 发现内存会涨 相较于未push之前
问题2:当push_back达到一定数量之后效率低 原因是什么 有啥好的解决方法deque?
谢谢
[解决办法]
不知道LZ说的会涨是什么意思,不过我一般这么写。
vector<string> a;......a = vector<string>(); // or swap(a, vector<string>());
[解决办法]
vector是连续的内容,默认大小很小,超出的时候大小会涨
你可以把vector想象成连续的数组
默认为 string* Vec = new string[1];
当超出的时候,vector会执行重新new和再把旧数据内存拷贝过去
string* Vec = new string[1*2];
再超出继续翻倍
string* Vec = new string[2*2]
string* Vec = new string[4*2]
依次类推。Vec占用空间会越来越大,你的clear释放的仅仅是string所占的空间,但是vector占用空间变大了,总内存当然占用更大
如果要初始化的时候就占用那么大可以用reserve方法,让vector直接就占用那么大的内存
你可以先reserve 100000,再push_back 100000个字符串,你会发现释放后与push_back前占用空间一样
[解决办法]
问题1:vector<string> 连续push_back 100000个字符串 ,然后clear掉 发现内存会涨 相较于未push之前
默认构造时会给一个固定的大小空间, 比如16, 当入栈超过这个数时,以一定的规律自增空间,比如*2N方, 具体可以看看 stl的实现。
问题2:当push_back达到一定数量之后效率低 原因是什么 有啥好的解决方法deque?
可以考虑list
[解决办法]
用2楼的就行了
vector<string> a; { vector<string> t; swap(a, t); }