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:
typ tablicy przy osadzaniu jest ważny - na przykład, jako członek klasy.
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.
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++)