程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> stl的實現原理簡單講解,通熟易懂,stl原理講解

stl的實現原理簡單講解,通熟易懂,stl原理講解

編輯:C++入門知識

stl的實現原理簡單講解,通熟易懂,stl原理講解


總結 
需要經常隨機訪問請用vector 
2.list 
list就是雙向鏈表,元素也是在堆中存放,每個元素都是放在一塊內存中,它的內存空間可以是不連續的,通過指針來進行數據的訪問,這個特點使得它的隨機存取變的非常沒有效率,因此它沒有提供[]操作符的重載。但由於鏈表的特點,它可以以很好的效率支持任意地方的刪除和插入。 
list沒有空間預留習慣,所以每分配一個元素都會從內存中分配,每刪除一個元素都會釋放它占用的內存. 
list在哪裡添加刪除元素性能都很高,不需要移動內存,當然也不需要對每個元素都進行構造與析構了,所以常用來做隨機操作容器. 但是訪問list裡面的元素時就開始和最後訪問最快 
訪問其它元素都是O(n) ,所以如果需要經常隨機訪問的話,還是使用其它的好 總結 
如果你喜歡經常添加刪除大對象的話,那麼請使用list 
要保存的對象不大,構造與析構操作不復雜,那麼可以使用vector代替 
list<指針>完全是性能最低的做法,這種情況下還是使用vector<指針>好,因為指針沒有構造與析構,也不占用很大內存 
 
3.deque 
deque是一個雙端隊列(double-ended queue),也是在堆中保存內容的.它的保存形式如下: [堆1] ... [堆2] ... [堆3] 
每個堆保存好幾個元素,然後堆和堆之間有指針指向,看起來像是list和vector的結合品. 
它支持[]操作符,也就是支持隨即存取,可以讓你在前面快速地添加刪除元素,或是在後面快速地添加刪除元素,然後還可以有比較高的隨機訪問速度,和vector的效率相差無幾,它支持在兩端的操作:
push_back,push_front,pop_back,pop_front等,並且在兩端操作上與list的效率也差不多。 
在標准庫中vector和deque提供幾乎相同的接口,在結構上它們的區別主要在於這兩種容器在組織內存上不一樣,deque是按頁或塊來分配存儲器的,每頁包含固定數目的元素.相反vector分配一段連續的內存,vector只是在序列的尾段插

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved