Sdílet prostřednictvím


Kontejnery (moderní verze jazyka C++)

Ve výchozím nastavení použijte vector jako výchozí sekvenční kontejner v jazyce C++.To odpovídá hodnotě List<T> v jiných jazycích.

vector<string> v;
v.push_back( "Geddy Lee" );

Použijte mapu (ne unordered_map) jako výchozí asociativní kontejner.Použijte příkazy set, multimap, multiset pro opětovné generování & několika případů.

map<string, string> phone_book;
// ...
phone_book["Alex Lifeson"] = "+1 (416) 555-1212";

Když je potřeba optimalizace výkonu, zvažte použití:

  1. typ pole při vkládání je důležitý – například jako člen třídy.

  2. neuspořádané asociativní kontejnery (unordered_map atd.): Nižší režie po prvcích (větší) a vyhledávaní v konstantním čase (potenciálně větší, někdy menší).Obtížnější použít správně a efektivně z důvodu obtíží a ostrých hran.

  3. řazený vektor. (Viz: Algoritmy.)

Nepoužívejte pole C. (Starší rozhraní API, použijte f( vec.data(), vec.size() );.)

Další článek o kontejnerech naleznete v tématu STL – kontejnery.

Velikosti kontejnerů

Následující tabulky popisují velikosti kontejneru v bajtech pro platformy x86 a x64. (32bitová architektura ARM pro tyto účely odpovídá architektuře x86). Tyto tabulky pokrývají režim vydání, protože obsahují ladicí režim kontroly strojních zařízení, která spotřebovávají místo a čas. Samostatné sloupce jsou pro Visual C++ 2008 SP1, kde je _SECURE_SCL přednastaveno na 1 a pro Visual C++ 2008 SP1 s _SECURE_SCL ručně nastaveno na 0 pro maximální rychlost. Visual C++ v sadě Visual Studio 2010, Visual C++ v sadě Visual Studio 2012 a Visual C++ v sadě Visual Studio 2013 výchozí _SECURE_SCL do 0 (není známé jako _ITERATOR_DEBUG_LEVEL).

x86 velikosti kontejneru (bajty)

VC9 SP1

VC9 SP1

SCL=0

VC10

VC11

vector<int>

24

16

16

12

pole<int, 5>

20

20

20

20

deque<int>

32

32

24

20

forward_list<int>

Není k dispozici

Není k dispozici

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 velikosti kontejneru (bajty)

VC9 SP1

VC9 SP1

SCL=0

VC10

VC11

vector<int>

48

32

32

24

pole<int, 5>

20

20

20

20

deque<int>

64

64

48

40

forward_list<int>

Není k dispozici

Není k dispozici

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

Viz také

Další zdroje

C++ vás vítá zpět (moderní verze jazyka C++)

Referenční dokumentace jazyka C++

Standardní knihovna C++ – referenční dokumentace