Condividi tramite


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:

  1. il tipo di matrice quando l'incorporamento è importante, ad esempio come membro di classe.

  2. 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à.

  3. 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

Vedere anche

Altre risorse

C++ (C++ moderno)

Riferimenti del linguaggio C++

Riferimento per la libreria standard C++