C 標準容器

2021-10-07 12:28:08 字數 1042 閱讀 1154

c++ 裡的容器很多,但可以按照不同的標準進行分類,常見的一種分類是依據元素的訪問方式,分成順序容器、有序容器和無序容器三大類別。

容器就是對資料結構的抽象和封裝,即能夠「容納」「存放」元素的一些資料結構。

c++ 標準庫里的容器幫助我們實現了最基本和最經典的資料結構,且容器的效能和優化水平已經非常完善,這一塊不需要自己造輪子。

容器的基本特性:儲存元素採用的是「值」(value)語義,容器裡儲存的是元素的拷貝、副本,而不是引用。

容器操作元素的很大一塊成本就是值的拷貝,如果元素比較大,或者非常多,那麼操作時的拷貝開銷就會很高,效能也就不會太好。常用的解決方法如下:

point p;

// 乙個拷貝成本很高的物件

v.push_back

(p);

// 儲存物件,拷貝構造,成本很高

v.push_back

(std::

move

(p))

;// 定義轉移構造後就可以轉移儲存,降低成本

v.

emplace_back(.

..);

// 直接在容器裡構造元素,不需要拷貝或者轉移

注意:不建議在容器裡存放元素的指標,來間接儲存元素。

原因:指標的開銷很低,但因為它是「間接」持有,導致不能利用容器自動銷毀元素的特性,而且必須要自己手動管理元素的生命週期,非常容易出錯,且有記憶體洩漏的隱患。

c++中標準容器分3類:順序容器、有序容器和無序容器,如下圖,來自[羅劍鋒c++實戰筆記]:

trick:多利用型別別名,而不要「寫死」容器定義。因為容器的大部分介面是相同的,所以只要變動別名定義,就能夠隨意改換不同的容器,對於開發、測試都非常方便。

C 標準容器

1.c 中的容器類包括 順序儲存結構 和 關聯儲存結構 順序儲存結構 包括 vector list deque等 關聯儲存結構 包括 set,map,multiset multimap等。若需要儲存的元素數在編譯器間就可以確定,可以使用陣列來儲存,否則,就需要用到容器類了。2.各種用法 如果經常需要...

C 標準庫關聯容器

1 關聯容器定義 儲存物件集合的型別,支援通過鍵的高效訪問。和順序容器的本質差別在於 順序容器通過元素在容器中的位置順序儲存和訪問元素,而關聯容器卻是依靠鍵。map和set是兩個基本的關聯容器型別,map以鍵值對的形式組織儲存元素,而set僅儲存鍵。2,pair型別 在utility標頭檔案中定義 ...

c 標準庫 容器類

容器類可以分為兩大類和容器介面卡 1 序列容器 sequence containers 這種容器中的元素是有序的,每乙個元素在容器中都有乙個確切的位置,這個位置不依賴於元素的值,而是跟放入容器的時機有關。標準的序列容器有三個 vector,deque,list。另外你也可以把字串 string 和陣...