標籤:
第一篇博文,希望不是最後一篇。o(∩_∩)o 哈哈
接下來幾篇博文會由淺到深地介紹 STL 超好用的順序容器。
- 順序容器: 定義:順序容器是容器的一類。該類容器中,對象(元素)在 容器中的位置 與加入容器的順序相對應,不依賴元素的值。
注意:順序容器幾乎可以儲存任意類型的元素,但可能限制元素容器操作。詳情請看下篇博文。
- 所有順序容器公用的 特點 : 所以順序容器都提供了快速順序訪問元素的能力。
順序容器的類型
| vector(常用) |
1.可變大小單向尾部數組 2.支援快速隨機訪問 3.不在後面插入刪除可能速度慢 |
| deque |
1.可變大小雙向隊列 2.支援快速隨機訪問 3.在頭尾插入刪除很快 |
| list |
1.可變大小雙向鏈表 2.只支援順序訪問 3.在任何位置插入刪除很快 |
| forward_list(c++11) |
1.可變大小單向頭部鏈表 2.只支援順序訪問 3.在任何位置插入刪除很快 |
| array(c++11) |
1.固定大小數組 2.支援快速隨機訪問 3.沒插入刪除但可以賦值
|
| string |
1.和vector很像,特例化,專門用來存字元 如:‘a‘,‘b‘
|
說明: 順序: 1.元素儲存在 連續 的記憶體空間中,用下標尋找很快。
但不在 開口地方(開口:vector/string 在尾部,deque 在頭尾) 插入刪除(array 一邊玩去)會很慢。
2.用迭代器訪問時,支援算術運算子。如:
1 std::vector<int>::iterator it = v.begin();2 it = it +2;
隨機: 1.要訪問一個元素,需要訪問整個容器。但插入刪除(array 你又來)很快。
2.用迭代器訪問時,不支援算術運算子,但支援自增自減。如:
1 std::list<int>::iterator it = v.begin();2 it = it +2; //錯誤3 it++;4 it++;
array: 設計目的:更安全,更容易使用數群組類型。
但是 大小固定(安全嘛),所以不支援任何改變容器大小的操作。
forward_list:設計目的:達到的效能 與 我們寫的最好的單向鏈表的效能 相當。
特別:沒有 size 操作。對其他容器來說,size 操作保證是常量時間的操作(包括list)
1. vertor 是最好的選擇,除非你有更好的選擇。
2. 有很多小元素,空間開銷重要。不要用 list 和 forward_list。
3. 要隨機訪問:選擇 vector 和 deque
4. 要求中間插入刪除:list 和 forward_list
5. 要求奇葩,如:要在中間插,然後要隨機訪問。
可以用各種方法解決:a. list 存 然後 copy 到 vector。
b. 直接用 vector 尾部插入,再用 STL 的 sort 排序到中間
c.....
tips: 對於公用操作(如建模板的操作),用迭代器,不使用下標,避免隨機訪問的可能。
2015-04-15
c++11 順序容器概括(1)