Contenitori (C++ moderno)
Per impostazione predefinita, utilizzare vettore come contenitore sequenziale predefinito in C++. Ciò equivale a List<T> in altri linguaggi.
vector<string> v;
v.push_back( "Geddy Lee" );
Utilizzare map (non unordered_map) come contenitore associativo predefinito. Utilizzare set, multimap, multiset per i casi degenerati e multi.
map<string, string> phone_book;
// ...
phone_book["Alex Lifeson"] = "+1 (416) 555-1212";
Quando è necessario ottimizzare le prestazioni, considerare l'utilizzo di:
il tipo di matrice quando l'incorporamento è importante, ad esempio come membro di classe.
contenitori associativi non ordinati (unordered_map e altri): sovraccarico minore per ogni elemento (importante) e ricerca in tempo costante (potenzialmente importante, a volte meno importante). Più difficile da utilizzare correttamente e in modo efficace, a causa di inconvenienti e instabilità.
vettore ordinato. (Vedere: Algoritmi).
Non utilizzare le matrici del linguaggio C Per le API precedenti, utilizzare f( vec.data(), vec.size() );.
Per un altro articolo sui contenitori, vedere Contenitori STL.
Dimensioni contenitore
Nelle tabelle seguenti sono mostrate le dimensioni del contenitore, in byte, per le piattaforme x86 e x64. (Per tali finalità, il monitoraggio ARM a 32 bit è equivalente a x86.) Queste tabelle coprono la modalità di rilascio, poiché la modalità di debug contiene un sistema di controllo che utilizza spazio e tempo. Le colonne separate sono per Visual C++ 2008 SP1, dove _SECURE_SCL ha il valore predefinito 1 e per Visual C++ 2008 SP1 con _SECURE_SCL impostato manualmente su 0 per offrire la velocità massima. In Visual C++ in Visual Studio 2010, Visual C++ in Visual Studio 2012 e Visual C++ in Visual Studio 2013 _SECURE_SCL è impostato su 0 per impostazione predefinita (ora noto come _ITERATOR_DEBUG_LEVEL).
Dimensioni del contenitore x86 (byte) |
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/D |
N/D |
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 |
tupla<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 |
Dimensioni del contenitore x64 (byte) |
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/D |
N/D |
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 |
tupla<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 |