C 容器,迭代器,容器的介面卡

2021-08-28 06:27:06 字數 2749 閱讀 8295

主要靠下標和迭代器進行操作。順序性的主要靠下標,鏈式的靠迭代器訪問。

包含了順序型的容器和鏈式的容器。

連續型的包括:

鏈式的包括:

主要靠關鍵字進行訪問。關聯容器主要是分為兩類:set型別的和map型別的。同時也可以按照有序和無序分類,也可以按照順序儲存和無序儲存分類。

總共有8中型別額關聯容器:

上述以unordered開頭的都是無序的關聯容器。關聯容器都是支援模板型別操作的。

關聯容器不支援順序容器的那種與位置有關的操作,比如push_backpush_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<

return0;

}

對於迭代操作,只要是有序容器,都是按照字典序輸出的。

一般來說,關聯容器的迭代器都是唯讀型別的,我們平時用的sort等的演算法都不適用這種容器,但是可以使用find的成員給鍵值定位。也可以使用copy進行複製操作。

插入操作

單個鍵值的插入:

使用內建的insert成員進行操作。幾個常用的操作:

上述的返回值都是乙個pair,作用同上。

多個鍵值的插入:

不返回任何資料,因為總是可以進行資料插入。

刪除操作

使用erase進行刪除操作:

map的下標操作

下標操作只適用於mapunordered_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()

迭代器是乙個泛型的指標型別,只要是可迭代的容器,都可以使用迭代器。介面卡不可以使用,比如stackqueuepriority_queue等的資料型別。

迭代器的標準運算成員:

使用了迭代器的迴圈體,不要向迭代器所屬的容器新增元素!!!

非標準迭代器成員的運算符號根據具體的容器確定。

容器的介面卡是乙個機制,使得某種事物看起來像另一種事物。給出基本型別和操作:

棧預設使用deque作為底層,佇列預設使用dequepriority_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...