容器是容納特定型別物件的集合。順序容器將單一型別元素聚集起來,並且根據位置來儲存和訪問這些元素。順序容器中元素排列順序與元素值無關,而是根據元素值新增到容器中的次序決定的。
標準庫中有三種順序容器,分別是vector,list與deque。其中vector支援隨機的快速訪問,因為vector中存放資料是在記憶體中連續存放的。在實際的實現中,vector會提前申請一塊較大的記憶體空間(如果指定了大小,一般是指定大小的兩倍),這樣每次加入新的元素時不用再申請新的記憶體空間,提高效率。list容器是類似於鍊錶的儲存方式,因此插入元素效率較高,查詢元素效率低,因為必須從頭開始查詢。deque是雙端佇列,也支援快速訪問,同時在兩端插入時有高效率。除了三種順序容器以外,還有三種介面卡,分別是stack,queue,priority_queue。介面卡在基礎的順序容器基礎上提供更高階的資料結構的行為,棧,佇列,有優先順序的佇列。容器都是類模板,支援泛型程式設計,提供多種資料型別的支援。
容器有多種初始化的方式,包括初始化為另乙個相同型別容器(容器型別與容器元素型別都需要相同)的副本,指定容器大小與內容的初始化,初始化為一段元素的副本等。其中初始化為一段元素的副本可以用另乙個容器型別不同但是容器元素型別相容的容器來初始化。容器的元素型別有限制,必須可以賦值和複製。由於引用賦值與一般的賦值含義不同,因此引用不可以作為容器元素。io物件不可以賦值和複製,也不可以作為容器物件。容器中都有迭代器,不同容器的迭代器可以支援的操作不同,一般迭代器都支援自增自減解引用判斷是否相等(==和!=)等操作,vector與deque的迭代器支援加減n,迭代器相加減,比較等操作。迭代器一般是左閉合區間,表示左邊的迭代器使用其指向的物件,右迭代器使用其前乙個物件。容器中刪除增加元素的操作都有可能導致迭代器失效,因此不要快取(在乙個變數中存放值)迭代器,具體失效與否與容器實現方式相關,迭代器實現與指標密切相關。
容器中定義了多個需要的型別,常用的有size_type,iterator,const_iterator等。此外容器提供了多種多樣的操作,包括插入資料:push_back(),push_front(),insert()等。其中只用list和deque支援push_front()操作,vector不支援。insert操作有多種呼叫方式。容器提供關係操作符的支援,但是具體的操作取決於容器元素型別。其他的刪除,定義大小,賦值等操作都有支援。其中vector容器由於器特殊的實現,提供capacity和reserve函式,capacity返回容器可以存放的最大資料元素的個數,reserve可以指定可以存放的元素的個數。具體的容器選擇可以根據應用的需求來確定,但是一般使用vector。因為其特殊的實現方式保證其高效率。string物件可以看做乙個字元容器,支援順序容器支援的很多操作,同時提供了很多自己獨特的介面。
C 標準庫 順序容器
二 容器的選擇 三 容器的操作 容器就是特定型別物件的集合。順序容器為程式設計師提供了控制元素儲存和訪問順序的能力,這種順序不依賴於元素的值,而是與元素加入容器時的位置相對應。相比於陣列,它可以很隨意的實現元素的新增 刪除等,我們也無需擔心記憶體分配的問題。要使用容器,必須包含相應的標頭檔案 inc...
C 標準庫順序容器知識點總結
c 具有內建資料結構,但為了更好的滿足開發者的需求,c 標準庫提供了多種容器來供程式設計師呼叫,本篇部落格主要是順序容器的相關知識點總結 在c 中,容器主要是一些特定型別的集合,順序容器為程式設計師提供儲存和順序訪問的能力,主要的容器型別有vector deque list forward list...
C 標準庫關聯容器
1 關聯容器定義 儲存物件集合的型別,支援通過鍵的高效訪問。和順序容器的本質差別在於 順序容器通過元素在容器中的位置順序儲存和訪問元素,而關聯容器卻是依靠鍵。map和set是兩個基本的關聯容器型別,map以鍵值對的形式組織儲存元素,而set僅儲存鍵。2,pair型別 在utility標頭檔案中定義 ...