Effective STL條款17-條款18

條款17:使用交換技巧來修正過剩容量

本節條款告訴我們,如果你有一個vector的容器,容器的容量是10000,但是,現在只用了1,那麼爲了節省內存,我們應該只保留使用的vector容量,多餘的容量應該釋放。

那麼,怎麼釋放呢?
作者提供了一種方式,如下代碼:

vector<int> a;
a.reserve(10000);
a.push_back(1);
vector<int>(a).swap(a);

以上代碼做了什麼?
很簡單,a先是申請了10000的容量空間,接着使用了1個單位空間,最後,利用一個臨時vector,根據拷貝構造函數,複製了a中的數據(此時臨時對象的容量爲1,因爲vector的拷貝構造函數只分配拷貝的元素需要的內存)。通過swap方法讓a還剩1個容量空間。

stirng也是一樣

string s;
s.reserve(10000);
s.push_back('sss');
vector<int>(s).swap(s);

條款18:避免使用vector<bool>

本節主要就是說,bool的vector容器不是真正存儲bool類型的對象,而是vector設計者用了位域的思想,直白的說就是一個bool對象由一個bit表示,而不是一個字節。

所以,vector<bool>對象不能執行如下操作

vector<bool>v;
bool*pb=&v[0];//錯誤

如果深入探討其中構造,則類型&v[0]返回的是reference*引用類型。

發佈了152 篇原創文章 · 獲贊 182 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章