乙個容器就是一些特定型別物件的集合。順序容器提供了控制元素儲存和訪問順序的能力。
順序容器型別
選取順序容器的一些準則:
與內建陣列相比,array是一種更安全,更容易使用的陣列型別,現代c++程式應該使用標準庫容器,而不是更原始的資料結構比如內建陣列
除非有很好的理由選擇其他容器,否則使用vector
其餘的選擇準則可以根據陣列/鍊錶/佇列等資料結構的性質來判定
迭代器的c.end()指向的是最後乙個元素之後的位置,c.begin()與c.end()這樣一組迭代器的範圍是左閉區間,右開區間
單向鍊錶forward_list不支援迭代器的遞減操作,根據單向鍊錶的資料結構性質很容易理解
begin和end相等則範圍為空,不等則至少包含乙個元素
將乙個容器建立為另乙個容器的拷貝的時候,需要兩個容器的型別和其元素型別都一致,在傳入迭代器範圍進行拷貝的時候不需要元素型別一致,只要能轉換成對應元素就可以。
除了string之外,指向容器的迭代器、引用和指標在swap之後都不會失效,仍指向swap之前的那些元素,但是對於string,它們都會失效。
關於swap:未完待續
關於forward_list:未完待續
關於string:未完待續
vector物件是連續儲存的,標準庫實現者採取了可以減少容器空間重新分配次數的策略,當不得不獲取新的記憶體空間時,vector和string的實現通常會分配比新的空間需求更大的記憶體空間,在使用該策略後,其擴張速度通常比list和deque快得多。
需要注意capacity和size的區別:容器的size是指它已經儲存的元素的數目;而capacity則是在不分配新的記憶體空間的前提下其最多能儲存的元素個數。
除了順序容器外,標準庫還定義了三個順序容器介面卡:stack,queue和priority_queue。介面卡(adapter)是標準庫中的乙個通用概念。容器,函式和迭代器都有介面卡。本質上,乙個介面卡是一種機制,能使某種事物的行為看起來像另外一種事物一樣。乙個容器介面卡接受一種已有的容器型別,使其行為看起來像一種不同的型別。
例如,stack介面卡接受一種已有的容器型別,使其行為看起來像stack一樣。可以理解為利用某種順序容器實現的stack類,並且抽象出來了pop(),push()等操作。
priority_queue和queue的區別在於priority_queue可以為佇列中的元素建立優先順序。至於stack,queue,priority_queue三者的具體操作細節,可以檢視c++的相關api。
C C 中STL的容器
一 六種序列容器 1 vector 向量 類似乙個陣列。區別在於 動態儲存 記憶體耗用更大,因為stl內部實現時,首先分配乙個非常大的記憶體空間預備進行儲存,即capacituy 函式返回的大小,當超過此分配的空間時再整體重新放分配一塊記憶體儲存,這給人以vector可以不指定vector即乙個連續...
C C 中的關聯容器
關聯容器支援高效的關鍵字查詢和訪問,兩個主要的關聯容器是set和map。map中的元素是一些鍵值對 key value 關鍵字起著索引的作用,值則表示與索引相關聯的資料,set中的元素只包含乙個關鍵字。set支援高效的關鍵字查詢操作,底層應該是用的雜湊表來實現的。c 標準庫提供了8個關聯容器,這8個...
容器 順序容器
容器 include include include 容器元素型別必須滿足 1.支援賦值運算 2.物件可以複製 而io庫型別這兩個都不支援,因此,不能建立存放io型別物件的容器 容器的容器 記得加空格 list vector a list容器迭代器不支援演算法運算 也不支援關係運算 等,它只有自增,...