C 抽象容器型別

2021-09-27 03:51:12 字數 1218 閱讀 9225

順序容器:擁有乙個單一型別元素組成的乙個有序集合。兩個主要的順序容器是 list 和 vector 【第三個順序容器為雙端佇列deque,它提供了與 vector 相同的行為,但是對於首元素的有效插入和刪除,提供了特殊的支援。】

關聯容器:支援查詢乙個容器是否存在,並且可以有效的獲取元素。兩個基本的關聯容器型別是 map(對映)和 set(集合)。map是乙個鍵/值(key/value)對,鍵(key)用於查詢,而值(value)包含我們希望使用的資料。例如,map可以很好的支援**目錄,鍵是人名,值是相關聯的**號碼。

set包含乙個單一鍵值,有效支援關於元素是否存在的查詢。例如,當我們要建立乙個單詞資料庫,且它包含在某個文字**現的單詞時,文字查詢系統對能會生成乙個單詞集合以排除the、and以及but等等。程式將順次讀取文字中的每個單詞,檢查它是否屬於被排除單詞的集合,並根據查詢的結果將其丟棄或者放入資料庫中。

map和set都只包含每個鍵的惟一出現, 即每個鍵只允許出現一次。multimap (多對映)和multiset (多集合)支援同乙個鍵的多次出現。例如,我們的**目錄可能需要為單個使用者支援多個列表,一種實現方法是使用multimap。

vector表示一段連續的記憶體區域,每個元素被順序儲存在這段記憶體中,對vector的隨機訪問(比如先訪問元素5,然後訪問15,然後再訪問7等等)效率很高,因為每次訪問離vector起始處的位移都是固定的。但是在任意位置,而不是在vector末尾插入元素,則效率很低,因為他需要把待插入元素的右邊的每個元素都拷貝一遍。類似的,刪除任意乙個,而不是vector的最後乙個元素,效率同樣很低,因為待刪除元素右邊的每個元素都需要複製一遍。這種代價對於大型的,複雜的類物件來說尤其大。(乙個deque也表示一段連續的記憶體區域,但是與vector不同的是,它支援高效的在其首部插入和刪除元素。他通過兩級陣列結構來實現,一級表示實際的容器,第二級指向容器的首和尾。)

list表示非連續的記憶體區域,並通過一對指向首尾元素的指標雙向連線起來,從而允許向前向後兩個方向進行遍歷。在list任何位置插入和刪除的效率都很高:指標必須被重新賦值,但是,不需要用拷貝元素來實現移動。另一方面,他對隨機訪問的支援並不太好:訪問乙個元素需要遍歷中間的元素。另外每個元素還有兩個指標的額外空間開銷。

下面是選擇順序容器的一些準則:

c Primer學習筆記 6 抽象容器型別

第六章 抽象容器型別 1 在這一章裡主要是通過介紹乙個文字查詢系統介紹了順序容器 vector list 和關聯容器 map set 的用法。這一章完全可以參考資料結構的書籍來學習。裡面的實現過程軍可以在資料結構書籍上看到,我們自己可以通過簡單的 c 語言來實現。個人感覺 這一章在以後的實用性上不是...

Java 抽象容器類

抽象容器類與集合和具體容器類之間的對應關係如圖所示 其中虛線表示介面,包含collection,list,set,queue,deque和map。同時包含六個抽象容器類。abstractcollection 實現了collection介面,被抽象類abstractlist abstractset a...

c 抽象資料型別

include class shape virtual shape virtual long getarea error virtual long getperim virtual void draw class circle public shape circle long getarea lon...