容器 (現代 C++)
預設會使用 向量 做為 C++ 的預設執行容器。 這是相當於以其他語言撰寫的 List<T>。
vector<string> v;
v.push_back( "Geddy Lee" );
使用 map (不是 unordered_map) 做為預設關聯的容器。 對變質且多個案例使用 set、multimap、multiset。
map<string, string> phone_book;
// ...
phone_book["Alex Lifeson"] = "+1 (416) 555-1212";
需要效能最佳化時,請考慮使用:
陣列類型,當內嵌很重要 (例如,做為類別成員) 時。
未排序的組合容器 (unordered_map等):較低每項額外負荷 (主要) 和固定時間搜尋 (可能是主要,有時為次要)。 因為使用不便且邊緣銳利,難以正確且有效率地使用。
排序的向量。(請參閱: 演算法)。
請勿使用 C 陣列。(舊版 API,使用 f( vec.data(), vec.size() ); )。
如需有關容器的其他文章,請參閱 STL 容器。
容器大小
下表顯示 x86 和 x64 平台的容器大小 (以位元組為單位)。(對於這些用途,32 位元 ARM 相當於 x86)。這些表格涵蓋的是發行模式,因為偵錯模式包含耗用空間和時間的檢查機制。不同的資料行分別屬於 Visual C++ 2008 SP1,其中 _SECURE_SCL 預設為 1,以及屬於 Visual C++ 2008 SP1,其中 _SECURE_SCL 手動設定為 0 以得出最高速度。在 Visual Studio 2010、Visual Studio 2012 中的 Visual C++ 和 Visual Studio 2013 中的 Visual C++ 的 Visual C++ 將 _SECURE_SCL 預設為 0 (現在稱為 _ITERATOR_DEBUG_LEVEL)。
x86 容器大小 (位元組) |
VC9 SP1 |
VC9 SP1 SCL=0 |
VC10 |
VC11 |
---|---|---|---|---|
vector<int> |
24 |
16 |
16 |
12 |
array<int, 5> |
20 |
20 |
20 |
20 |
deque<int> |
32 |
32 |
24 |
20 |
forward_list<int> |
N/A |
N/A |
8 |
4 |
list<int> |
28 |
12 |
12 |
8 |
priority_queue<int> |
28 |
20 |
20 |
16 |
queue<int> |
32 |
32 |
24 |
20 |
stack<int> |
32 |
32 |
24 |
20 |
pair<int, int> |
8 |
8 |
8 |
8 |
tuple<int, int, int> |
16 |
16 |
16 |
12 |
map<int, int> |
32 |
12 |
16 |
8 |
multimap<int, int> |
32 |
12 |
16 |
8 |
set<int> |
32 |
12 |
16 |
8 |
multiset<int> |
32 |
12 |
16 |
8 |
hash_map<int, int> |
72 |
44 |
44 |
32 |
hash_multimap<int, int> |
72 |
44 |
44 |
32 |
hash_set<int> |
72 |
44 |
44 |
32 |
hash_multiset<int> |
72 |
44 |
44 |
32 |
unordered_map<int, int> |
72 |
44 |
44 |
32 |
unordered_multimap<int, int> |
72 |
44 |
44 |
32 |
unordered_set<int> |
72 |
44 |
44 |
32 |
unordered_multiset<int> |
72 |
44 |
44 |
32 |
string |
28 |
28 |
28 |
24 |
wstring |
28 |
28 |
28 |
24 |
x64 容器大小 (位元組) |
VC9 SP1 |
VC9 SP1 SCL=0 |
VC10 |
VC11 |
---|---|---|---|---|
vector<int> |
48 |
32 |
32 |
24 |
array<int, 5> |
20 |
20 |
20 |
20 |
deque<int> |
64 |
64 |
48 |
40 |
forward_list<int> |
N/A |
N/A |
16 |
8 |
list<int> |
56 |
24 |
24 |
16 |
priority_queue<int> |
56 |
40 |
40 |
32 |
queue<int> |
64 |
64 |
48 |
40 |
stack<int> |
64 |
64 |
48 |
40 |
pair<int, int> |
8 |
8 |
8 |
8 |
tuple<int, int, int> |
16 |
16 |
16 |
12 |
map<int, int> |
64 |
24 |
32 |
16 |
multimap<int, int> |
64 |
24 |
32 |
16 |
set<int> |
64 |
24 |
32 |
16 |
multiset<int> |
64 |
24 |
32 |
16 |
hash_map<int, int> |
144 |
88 |
88 |
64 |
hash_multimap<int, int> |
144 |
88 |
88 |
64 |
hash_set<int> |
144 |
88 |
88 |
64 |
hash_multiset<int> |
144 |
88 |
88 |
64 |
unordered_map<int, int> |
144 |
88 |
88 |
64 |
unordered_multimap<int, int> |
144 |
88 |
88 |
64 |
unordered_set<int> |
144 |
88 |
88 |
64 |
unordered_multiset<int> |
144 |
88 |
88 |
64 |
string |
40 |
40 |
40 |
32 |
wstring |
40 |
40 |
40 |
32 |