C++ string清空并释放内存空间的两种方法(shrink_to_fit()、swap())
生活随笔
收集整理的這篇文章主要介紹了
C++ string清空并释放内存空间的两种方法(shrink_to_fit()、swap())
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
說明
在STL中 vector和string 是比較特殊的,clear()之后是不會(huì)釋放內(nèi)存空間的,也就是size()會(huì)清零,但capacity()不會(huì)改變,需要手動(dòng)去釋放,說明 clear() 沒有釋放內(nèi)存。
想釋放空間的話,除了swap一個(gè)空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() << '\n';s.clear();std::cout << "Capacity after clear() is " << s.capacity()<< " and size is " << s.size() << '\n';s.shrink_to_fit();std::cout << "Capacity after shrink_to_fit() 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() << '\n';string().swap(s);std::cout << "Capacity after swap() is " << s.capacity()<< " and size is " << s.size() << '\n'; }輸出為:
Default-constructed capacity is 15 and size is 0 Capacity after a couple of appends is 235 and size is 168 Capacity after clear() is 235 and size is 0 Capacity after shrink_to_fit() is 15 and size is 0 Capacity after a couple of appends is 235 and size is 168 Capacity after swap() is 15 and size is 0?
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的C++ string清空并释放内存空间的两种方法(shrink_to_fit()、swap())的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中swap函数_python
- 下一篇: 优先队列(priority_queue)