C STL 容器高效使用

2022-08-29 20:54:20 字數 1212 閱讀 7443

1. 容器中物件拷貝高效、防剝離發生的方法:

使容器包含指標而不是物件。(ps:stl容器是在建立拷貝,相比陣列,是動態建立,節省時間和空間)

2. 總是呼叫empty()而不是size==0來判斷容器是否為空:

empty()對所有stl容器都是常數時間操作,而size()對某些容器(如list)是線性時間操作,size()更耗時。

3. vector、list、deque的比較:

(1)vector是連續儲存結構,相比陣列,多了動態記憶體管理。

優點是:支援高效的隨機訪問,支援尾端高效插入/刪除。占用記憶體小。

缺點是:首端和中間位置的插入/刪除效率低下。

(ps:vector擴充記憶體的步驟:①分配一塊更大的新記憶體 ②將原記憶體中資料複製到新記憶體 ③將原記憶體空間釋放給系統)

(2)duque是連續儲存結構,相比vector,deque維護了容器的首端位址,故支援高效的首端插入/刪除操作。

優點是:支援高效的隨機訪問,支援首尾端高效插入/刪除。

缺點是:占用的記憶體大。

(3)list是非連續儲存結構,是雙向鍊錶結構,每個節點維護其前後節點的位址,故支援前/後向遍歷。

優點是:不使用連續記憶體完成動態操作,支援任意位置高效的隨機插入/刪除。

缺點是:不能進行內部隨機訪問(不支援和.at()),占用的記憶體大。

(4)三者使用原則:

① 如果需要高效的隨機訪問,而不在乎插入/刪除的效率,使用vector

② 如果需要大量高效的插入/刪除,而不在乎隨機訪問時間,使用list

③ 如果需要高效的隨機訪問,還要大量的首尾端插入/刪除,使用deque

4. 區間成員函式要優於對應的單元素成員函式:

區間成員函式,即:insert(iterator begin, iterator end)、erase(iterator begin, iterator end)、assign(iterator begin, iterator end)

單元素成員函式,即:push_back(元素)、push(元素)、insert(元素)、erase(元素)

使用區間成員函式的好處:**簡潔、容易表達意圖、效率高。

5. 容器中的元素型別是new出來指標型別,要注意:

需要記得容器使用完後,人工delete指標指向記憶體。或者用帶有引用計數的智慧型指標shared_ptr作為容器元素,可以不用人工釋放記憶體,避免記憶體洩露。(ps:切記不能使用auto_ptr,其不是引用計數的智慧型指標)

C STL基本容器的使用

c 中有兩種型別的容器 順序容器和關聯容器。順序容器主要有vector list deque等。其中vector表示一段連續的記憶體,基於陣列實現,list表示非連續的記憶體,基於鍊錶實現,deque與vector類似,但是對首元素提供插入和刪除的雙向支援。關聯容器主要有map和set。map是ke...

c STL 容器 聯合容器

stl提供了四種聯合容器 set,multiset,map,multimap set and multiset在標頭檔案 map and multimap在標頭檔案 模板函式都一樣的 set map中迭代器不能 或 因為不是連續的序列,是樹。set 在set中,值就是關鍵字,集合中不會有多個相同的關...

c STL 容器 中 swap的使用

主要涉及以下內容 可以從下面 中檢視上述內容的解釋 include include include void printvector std vectorv int swap usage int size capacity printf n std vectorv2 printf v2 n v2.r...