文章目錄
容器
同一種類型對象的集合。這些容器的共有成員函數:empty()判斷容器中是否有元素,max_size()容器中最多能裝多少元素,swap()交換兩個容器的內容。
比較兩個容器大小的運算子:=,<,<=,>,>=,==,!=
- 1.若兩容器長度相同、所有元素相等,則兩個容器就相等,否則為不等。
- 2.若兩容器長度不同,但較短容器中所有元素都等於較長容器中對應的元素,則較短容器小於另一個容器。
- 3.若兩個容器均不是對方的子序列,則取決於所比較的第一個不等的元素)
線性表
在實際應用中,線性表都是以字串string,數組array,棧stack,隊列queue,優先隊列priority_queue,向量vector,列表list,雙向隊列deque等特殊線性表的形式來使用的。根據儲存方式可分為順序表,鏈表;鏈表又分為單鏈表,雙鏈表,迴圈鏈表。
順序容器(vector,list,deque)
元素排列次序與元素值無關,而是由元素添加到容器裡的順序決定的。
- 1.定義賦值,它們的定義賦值assign及用法完全相同。
- 2.都有返回表頭元素表尾元素front(),back(),對於雙向鏈表list和雙向隊列deque來說也只有一個表頭和一個表尾,這裡的雙向是對元素可以雙向添加刪除而言的。
- 3.增加刪除元素,都提供了在表尾增加刪除元素方法push_back(),pop_back(),在任意位置增加刪除元素方法insert(),erase(),全部刪除元素clear()。
- 4.返回iterator和reverse_iterator 返回指向表頭元素的指標begin(),返回表尾元素下一個位置end(),返回指向表尾元素的指標rbegin(),返回表頭元素前一個位置rend()。
- 5.其他 擷取長度size(),重設長度resize(),返回最大長度max_size(),兩個容器互換swap(),判斷是否為空白empty()
vector
向量vector就是動態數組。順序儲存(說明可以用索引值,at()來進行元素訪問,且其iterator可以+-n),連續儲存元素。比list和deque多提供了擷取容量capacity(),設定最小容量reserve()
list
列表list是一個雙向鏈表。鏈式儲存(不可以用索引值來進行訪問,且其iterator不可以+-n),由節點群組成的雙向鏈表,每個節點包含著一個元素。由於是雙向鏈表,所以比vector多提供了在表頭增加刪除函數push_front(),pop_front(),此外比vector和deque多提供了排序函數sort(),隊列合并merge()(注意:合并前需要排序),接合函數splice(),去重函數unique(),刪除元素函數remove(),remove_if()
deque
雙向隊列deque。順序儲存(說明可以用索引值,at()來進行元素訪問,且其iterator可以+-n),連續儲存指向不同元素的指標所組成的數組。由於是雙向隊列,所以比vector多提供了在表頭增加刪除函數push_front(),pop_front(),此外比vector少提供了逆序函數reverse()
選擇容器類型的法則
如果程式要求隨機訪問元素,則應使用 vector 或 deque 容器。
如果程式必須在容器的中間位置插入或刪除元素,則應採用 list 容器。
如果程式不是在容器的中間位置,而是在容器首部或尾部插入或刪除元素,則應採用 deque 容器。
如果只需在讀取輸入時在容器的中間位置插入元素,然後需要隨機訪問元素,則可考慮在輸入時將元素讀入到一個 list 容器,接著對此容器重新排序,使其適合順序訪問,然後將排序後的 list 容器複製到一個 vector 容器。