1. 程式人生 > >C++STL----容器高效使用

C++STL----容器高效使用

size pos 需要 註意 gpo 大量 表達 意圖 成員函數

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----容器高效使用