Udostępnij za pośrednictwem


Kontenery (Modern C++)

Domyślnie użyjwektora jako domyślnego kontenera sekwencyjnego w języku C++.Jest to odpowiednik listy<T> w innych językach.

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

Użyj mapy (nie unordered_map) jako domyślnego kontenera zespolonego.Użyj zestaw, multimapa, multizbór dla degeneracji & przypadków multi.

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

Gdy potrzebna jest optymalizacja wydajności, należy rozważyć zastosowanie:

  1. typ tablicy przy osadzaniu jest ważny - na przykład, jako członek klasy.

  2. Nieuporządkowany kontenery asocjacyjne (unordered_map, et al.): obniżyć koszty-element (duże) i stała w czasie wyszukiwania (potencjalnie poważnych, czasem mniejszych).Trudniejsze do użytku prawidłowo i efektywnie, z powodu niedogodności i ostrych krawędzi.

  3. Wektor posortowane. (Zobacz: Algorytmy).

Nie należy używać tablic C. (Dla starszych interfejsów API użyj f( vec.data(), vec.size() );).

Kolejny artykuł o kontenerów, zobacz temat Kontenery STL.

Rozmiary kontenera

W poniższych tabelach przedstawiono rozmiary kontenera, w bajtach dla platform x86 i x64. (Do tych celów 32-bitowa architektura ARM jest równoważna z x86). Te tabele zawierają tryb wersji, ponieważ tryb debugowania zawiera kontrolę maszyn, która zajmuje czas i miejsce. Oddzielne kolumny są dla Visual C++ 2008 SP1, gdzie _SECURE_SCL domyślnie ma wartość 1 oraz dla Visual C++ 2008 SP1 z _SECURE_SCL ręcznie ustawiono 0 jako prędkość maksymalną. Visual C++ w Visual Studio 2010, Visual C++ w programie Visual Studio 2012, i Visual C++ w programie Visual Studio 2013 domyślne _SECURE_SCL 0 (obecnie znane jako _ITERATOR_DEBUG_LEVEL).

x86 Rozmiary kontenera (bity)

VC9 SP1

VC9 SP1

SCL=0

VC10

VC11

wektor<int>

24

16

16

12

tablica<int 5>

20

20

20

20

deque<int>

32

32

24

20

forward_list<int>

Nie dot.

Nie dot.

8

4

lista<int>

28

12

12

8

priority_queue<int>

28

20

20

16

kolejki<int>

32

32

24

20

stos<int>

32

32

24

20

pair<int, int>

8

8

8

8

tuple<int, int, int>

16

16

16

12

mapa<int, int>

32

12

16

8

multimap<int, int>

32

12

16

8

zestaw<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 Rozmiary kontenera (bity)

VC9 SP1

VC9 SP1

SCL=0

VC10

VC11

wektor<int>

48

32

32

24

tablica<int 5>

20

20

20

20

deque<int>

64

64

48

40

forward_list<int>

Nie dot.

Nie dot.

16

8

lista<int>

56

24

24

16

priority_queue<int>

56

40

40

32

kolejki<int>

64

64

48

40

stos<int>

64

64

48

40

pair<int, int>

8

8

8

8

tuple<int, int, int>

16

16

16

12

mapa<int, int>

64

24

32

16

multimap<int, int>

64

24

32

16

zestaw<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

Zobacz też

Inne zasoby

Zapraszamy ponownie do języka C++ (Modern C++)

Materiały referencyjne dotyczące języka C++

Odwołanie do standardowej biblioteki C++