jasmine214--love

          只有當你的內心總是充滿快樂、美好的愿望和寧靜時,你才能擁有強壯的體魄和明朗、快樂或者寧靜的面容。
          posts - 731, comments - 60, trackbacks - 0, articles - 0

          C++ 容器類

          Posted on 2010-08-12 13:54 幻海藍夢 閱讀(302) 評論(0)  編輯  收藏 所屬分類: C++
           

          C++中的容器類包括“順序存儲結構”和“關聯存儲結構”,前者包括vector,list,deque等;后者包括set,map,multiset,multimap等。
          若需要存儲的元素數在編譯器間就可以確定,可以使用數組來存儲,否則,就需要用到容器類了。


          1
          、vector
              連續存儲結構,每個元素是在內存上是連續的;
              支持高效的隨機訪問和在尾端插入/刪除操作,但其他位置的插入/刪除操作效率低下;
          2、deque
              連續存儲結構,即其每個元素在內存上也是連續的,類似于vector,不同之處在于,deque提供了兩級數組結構,第一級完全類似于vector,代表實際容器;另一級維護容器的首位地址。
              這樣,deque除了具有vector的所有功能外,還支持高效的首端插入/刪除操作。
          3、list
              非連續存儲結構,具有雙鏈表結構,每個元素維護一對前向和后向指針,因此支持前向/后向遍歷。
              支持高效的隨機插入/刪除操作,但隨機訪問效率低下,且由于需要額外維護指針,開銷也比較大。

          4、vector V.S. list V.S. deque:
              a、若需要隨機訪問操作,則選擇vector;
              b、若已經知道需要存儲元素的數目, 則選擇vector;
              c、若需要隨機插入/刪除(不僅僅在兩端),則選擇list
              d、只有需要在首端進行插入/刪除操作的時候,才選擇deque,否則都選擇vector。
              e、若既需要隨機插入/刪除,又需要隨機訪問,則需要在vector與list間做個折中。
              f、當要存儲的是大型負責類對象時,list要優于vector;當然這時候也可以用vector來存儲指向對象的指針,同樣會取得較高的效率,但是指針的維護非常容易出錯,因此不推薦使用。

          5、capacity V.S size
              a、capacity是容器需要增長之前,能夠盛的元素總數;只有連續存儲的容器才有capacity的概念(例如vector,deque,string),list不需要capacity。
              b、size是容器當前存儲的元素的數目。
              c、vector默認的容量初始值,以及增長規則是依賴于編譯器的。

          6、用vector存儲自定義類對象時,自定義類對象須滿足:
              a、有可供調用的無參構造函數(默認的或自定義的);
              b、有可用的拷貝賦值函數(默認的或自定義的)

          7、迭代器iterator
              a、vector與deque的迭代器支持算術運算,list的迭代器只能進行++/--操作,不支持普通的算術運算。

          主站蜘蛛池模板: 东兴市| 炉霍县| 始兴县| 蒲江县| 衡东县| 香港| 阿图什市| 黄山市| 潼南县| 延川县| 徐州市| 遂昌县| 滨州市| 临泉县| 高青县| 泰州市| 平潭县| 白山市| 大庆市| 新营市| 江华| 湟中县| 景宁| 常宁市| 永修县| 调兵山市| 乾安县| 龙胜| 濮阳县| 库尔勒市| 罗田县| 甘德县| 开化县| 图木舒克市| 白玉县| 杂多县| 兴隆县| 望奎县| 和龙市| 靖江市| 铁力市|