1. 寫在最前面
這將是博主的第一篇技術博客,思考再三決定從翻譯開始。這將是一個系列的博客,由不同的章節組成,章節之間由超鏈接聯系,開發過程將使用增量式開發,每次完成一個章節。本篇是本系列的總冊,提供了所有子章節的超鏈接,另外所有的子章節也都將提供鏈接返回到本篇。
2. 本系列的目錄結構
第三章 <forward_list>
第四章 <list>
第五章 <map>
第六章 <queue>
第七章 <set>
第八章 <stack>
第九章 <unordered_map>
第十章 <unordered_set>
第十一章 <vector>
3. 專有名詞的翻譯規范
專用名詞的翻譯在不同的資料中會有較大的差異,本文遵循如下的翻譯規范:
allocator 分配器
array 數組容器(當主語代表數組容器時)/數組(當主語代表普通數組時)
deque 雙向隊列
forward list 單鏈表
list 鏈表
map 映射
queue 隊列
set 集合
stack 棧
unordered map 無序映射
unordered set 無序集合
vector 動態數組
priority queue 優先隊列
4. 本系列的原文
5. 標准容器
容器,正如其字面意思,是存儲了一組對象的數據集合(這里的每個對象都是這個容器的元素),當然了這里的容器本身也是一個對象。所有的容器都被設計成為模板類,這樣一來容器可存儲的元素類型就具有非常大的靈活性。
容器負責管理自身用以存儲元素的物理空間,並且提供了成員函數來訪問這些元素 -- 有直接訪問的方式也有通過迭代器(具有類似指針的屬性)訪問的方式。
容器實現了程序設計中非常常見的結構:動態數組(vector),隊列(queue),棧(stack),堆(priority_queue),鏈表(list),樹(set),關聯數組(map)...
許多不同的容器具有相同的成員函數,並且共享一些功能。在決定使用哪一種具體的容器時,不僅僅需要考慮到容器提供的功能,同時也要考慮到訪問其成員的效率(復雜度)。尤其是對於序列容器,這些容器在插入/刪除元素與訪問元素的復雜度之間有着不同的權衡。
stack, queue以及priority_queue被實現為容器適配器。容器適配器並不是完整的容器,而是一個提供了某些特定接口的類,容器適配器將一個容器封裝起來,然后就可以通過容器適配器提供的這些接口來訪問這個容器的元素。
6. 容器模板類
序列容器
array (c++11 only) | 數組類 (模板類) |
vector | 動態數組 (模板類) |
deque | 雙端隊列 (模板類) |
forward_list | 單鏈表 (模板類) |
list (c++11 only) | 鏈表 (模板類) |
容器適配器
stack | 先入后出棧 (模板類) |
queue | 先入先出隊列 (模板類) |
priority_queue | 優先隊列 (模板類) |
關聯容器
set | 集合 (模板類) |
multiset | 多重集合 (模板類) |
map | 映射 (模板類) |
multimap | 多重影射 (模板類) |
無序關聯容器
unordered_set | 無序集合 (模板類) |
unordered_multiset | 無序多重集合 (模板類) |
unordered_map | 無序映射 (模板類) |
unordered_multimap | 無序多重映射 (模板類) |
7. 成員列表
序列容器
關聯容器