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í:
typ pole při vkládání je důležitý – například jako člen třídy.
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.
ř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++)