STL中的最有用的經驗總結(二)

2021-06-19 03:50:17 字數 1011 閱讀 5364

一、stl容器不能保證執行緒安全

解釋:在執行改寫容器中內容的語句的時候,stl不能保證結果的唯一性。當然,多執行緒的併發讀操作是執行緒安全的。

常見的寫操作包括:插入(push),彈出(pop),刪除(erase、clear),賦值(*p=3;)等,因此在多個執行緒併發改寫容器內容的時候,要加鎖保證執行緒的同步。

二、無論何時,你發現你自己準備動態分配乙個陣列(也就是,企圖寫「new t[...]」),你應該首先考慮使用乙個vector或乙個string。(一般來說,當t是乙個字元型別的時候使用string,否則使用vector,但我們在本條款的後面將遇到的情況中,vector可能是乙個合理的設計選擇。)

vector的clear或erase函式不會真正釋放掉記憶體,因此當乙個vector的capacity很大但是你暫時用不了這麼大的記憶體的時候,應該對capacity做適當修剪,採用swap函式吧。

原理:用乙個臨時物件和當前vector進行swap(交換),臨時物件出作用域後自然就釋放掉了記憶體。

vectorv(100);//capacity==100

......... //省略各種操作

//準備修剪記憶體(clear和erase是不行的)

//釋放記憶體

cout<

vectorv(100);//capacity==100

v.push_back(1);

cout<(v).swap(v)//(v)呼叫的是v的拷貝建構函式,僅僅拷貝實際存在的值

}//釋放記憶體

coutstring s;

... // 使用v和s

vector().swap(v); // 清除v而且最小化它的容量

string().swap(s); // 清除s而且最小化它的容量

四、避免使用vector

理由:第一,它不是乙個stl容器。第二,它並不容納bool。

至於原因,effective_stl那本書上條款18講的很好,但是我沒有看明白,所以不敢亂說。

STL中的最有用的經驗總結(一)

整理自 effective stl 一 確保容器中的拷貝操作是輕量級的。理由 對於序列容器vector deque和string等的插入或刪除 中間元素 會造成元素的移動 拷貝 排序演算法 next permutation previous permutation remove unique rev...

學習中的經驗總結

1.要學習某個領域的時候,先看文獻綜述,了解該方向的大體趨勢和內容,再根據需要重點看其中的某些演算法 2.寫 作業時,要知道老師要求的重點在 雖然內容很重要,但格式基本不能出錯,畢竟是不用動腦子的部分,不是嗎?要聽話,不要自以為是。3.專業書籍千萬千萬不要丟掉,尤其是自己的筆記 本科畢業的時候把所有...

在公司的經驗總結

1 團隊真的很重要,我以前總是喜歡乙個人做事情,因為有美術功底,所以有時候自己先切圖,然後再寫 但是效果往往不佳,因為我畢竟不是專門搞美術的。2 千萬不要在公司人員前說他們做的事情很簡單,就算他們做的事情真的很簡單。3 如果老闆問你有什麼自己的想法,如果你的想法與公司的業務不相關,你最好別說。4 不...