Share via


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:

  1. den Arraytyp, wenn das Einbetten wichtig ist – beispielsweise als Klassenmember.

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

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

Siehe auch

Weitere Ressourcen

Willkommen zurück bei C++ (Modern C++)

C++-Sprachreferenz

C++-Standardbibliotheksreferenz