Container (Modern C++)
Verwenden Sie standardmäßig Vektor als standardmäßigen sequenziellen Container in C++. Dies ist die Entsprechung von List<T> in anderen Sprachen.
vector<string> v;
v.push_back( "Geddy Lee" );
Verwenden Sie map (nicht unordered_map) als standardmäßigen assoziativen Container. Verwenden Sie set, multimap und multiset für degenerierte & Mehrfachfälle.
map<string, string> phone_book;
// ...
phone_book["Alex Lifeson"] = "+1 (416) 555-1212";
Wenn eine Leistungsoptimierung erforderlich ist, erwägen Sie folgende Verwendungen:
den Arraytyp, wenn das Einbetten wichtig ist – beispielsweise als Klassenmember.
Ungeordnete assoziative Container (unordered_map, et al.): Niedrigerer Mehraufwand pro Element (Hauptversion) und konstante Zeitsuche (möglicherweise Hauptversion, manchmal Nebenversion). Aufgrund von Unannehmlichkeiten und scharfen Kanten ist die korrekte und effiziente Verwendung schwieriger.
Sortierter Vektor. (Siehe: Algorithmen.)
Verwenden Sie keine C-Arrays. (Verwenden Sie f( vec.data(), vec.size() ); für ältere APIs.)
Einen anderen Artikeln zu Containern finden Sie unter STL Containers.
Containergrößen
Die folgenden Tabellen zeigen die Containergrößen in Bytes für die x86- und die x64-Plattform an. (32-Bit-ARM ist in diesen Fällen äquivalent zu x86.) Diese Tabellen beziehen sich auf den Releasemodus, weil der Debugmodus Überprüfungsmechanismen enthält, die Platz und Zeit benötigen. Die separaten Spalten sind für Visual C++ 2008 SP1, mit dem Standardwert 1 für _SECURE_SCL, und Visual C++ 2008 SP1, wobei _SECURE_SCL manuell auf 0 für Höchstgeschwindigkeit eingestellt wurde. Visual C++ in Visual Studio 2010, Visual C++ in Visual Studio 2012 und Visual C++ in Visual Studio 2013 ist _SECURE_SCL standardmäßig 0 (jetzt als _ITERATOR_DEBUG_LEVEL bezeichnet).
x86-Containergrößen (Bytes) |
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> |
Nicht zutreffend |
Nicht zutreffend |
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-Containergrößen (Bytes) |
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> |
Nicht zutreffend |
Nicht zutreffend |
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 |