主要靠下標和迭代器進行操作。順序性的主要靠下標,鏈式的靠迭代器訪問。
包含了順序型的容器和鏈式的容器。
連續型的包括:
鏈式的包括:
主要靠關鍵字進行訪問。關聯容器主要是分為兩類:set
型別的和map
型別的。同時也可以按照有序和無序分類,也可以按照順序儲存和無序儲存分類。
總共有8中型別額關聯容器:
上述以unordered
開頭的都是無序的關聯容器。關聯容器都是支援模板型別操作的。
關聯容器不支援順序容器的那種與位置有關的操作,比如push_back
、push_front
等,這些操作無意義。關聯容器的迭代是雙向的。
有序關聯容器的關鍵字必須定義比較函式,否則無法放入容器,因為容器需要靠<
比較函式才能進行資料結構的構建。使用有序容器儲存自定義的資料型別時,除了給出資料型別的模板之外,還要給出自定義的操作型別。不過我們一般都是過載運算子<
進行操作。
#include
#include
using namespace std;
class data1
bool operator<
(const data1 &d)
int a,b,c;};
intmain()
pair
資料型別,存在於utility
標頭檔案。該資料型別用於map
大類的操作,具體有一下幾個操作:
幾個特性:
上述說的型別是大類。
迭代操作
一般使用自動推導得到迭代器,迭代器是value_type
型別的指標。
注意,set
的迭代器是const
型別的,只能讀不能修改,這很好理解,因為一旦修改鍵值,所有的排列順序都要進行改變;而map
的不能修改鍵值,但是可以修改鍵值對應的資料:
#include
#include
using namespace std;
intmain()
,};for
(auto it=m.
begin()
;it!=m.
end(
);it++
) cout</ 輸出new
return0;
}
對於迭代操作,只要是有序容器,都是按照字典序輸出的。
一般來說,關聯容器的迭代器都是唯讀型別的,我們平時用的sort
等的演算法都不適用這種容器,但是可以使用find
的成員給鍵值定位。也可以使用copy
進行複製操作。
插入操作
單個鍵值的插入:
使用內建的insert
成員進行操作。幾個常用的操作:
上述的返回值都是乙個pair
,作用同上。
多個鍵值的插入:
不返回任何資料,因為總是可以進行資料插入。
刪除操作
使用erase
進行刪除操作:
map的下標操作
下標操作只適用於map
和unordered_map
,不能用於多鍵值的;同時,元素必須是非const
型別的。set
沒有下標操作。兩種資料型別:
訪問操作無序容器使用hash
函式和==
進行運算。主要處理元素沒有明顯有序關係的情況,理論上有更好的效能,但是實際上需要多次進行工程驗證效率。
無序容器的插入刪除和有序容器基本一致,只是沒有和序列有關的操作。無序容器使用了乙個鏈式的桶狀結構,效能取決於雜湊函式的質量和桶的數量與大小。如果是自定義的資料型別,我們需要自己來說明雜湊函式,否則不能直接使用。
#include
#include
// 注意標頭檔案
#include
#include
using namespace std;
class data
int n;
string str;};
size_t hasher
(const data &d)
bool cmp
(const data& d1,
const data &d2)
intmain()
迭代器是乙個泛型的指標型別,只要是可迭代的容器,都可以使用迭代器。介面卡不可以使用,比如stack
、queue
和priority_queue
等的資料型別。
迭代器的標準運算成員:
使用了迭代器的迴圈體,不要向迭代器所屬的容器新增元素!!!
非標準迭代器成員的運算符號根據具體的容器確定。
容器的介面卡是乙個機制,使得某種事物看起來像另一種事物。給出基本型別和操作:
棧預設使用deque
作為底層,佇列預設使用deque
,priority_queue
預設使用vector
作為底層。也可以自定義底層容器。需要注意的是:介面卡不能進行迭代!!
容器介面卡(棧容器介面卡 佇列容器介面卡)
我們已有的容器 比如vector list 這個容器支援的操作很多,比如插入,刪除,迭代器訪問等等。而我們希望這個容器表現出來的是棧的樣子 先進後出,入棧出棧等等,此時,我們沒有必要重新動手寫乙個新的資料結構,而是把原來的容器重新封裝一下,改變它的介面,就能把它當做棧使用了。c 定義了三種容器介面卡...
C 容器介面卡
1 什麼是介面卡 2 容器介面卡 3 為什麼將stack queue和priority queue稱作為容器介面卡 雖然stack queue priority queue中也可以存放元素,但在stl中並沒有將其劃分在容器的行列,而是將其稱為容器介面卡,這是因為每個容器在底層都有自己的實現方式,而s...
C 容器介面卡
除了順序容器外,標準庫還定義了三個順序容器介面卡 stack,queue和priority queue。介面卡是一種機制,能夠使某種事物行為看起來像另外一種事物。乙個容器介面卡接受一種已有的容器型別,使其行為看起來像一種不同的型別。所有容器介面卡都支援的操作和型別 操作和型別 說明size type...