Contêineres (C++ moderno)
Por padrão, use vetor como o contêiner sequencial padrão em C++. Este é o equivalente de List<T> em outros idiomas.
vector<string> v;
v.push_back( "Geddy Lee" );
Use map (e não unordered_map) como o contêiner associativo padrão. Use set, multimap, multiset para degenerar & vários casos.
map<string, string> phone_book;
// ...
phone_book["Alex Lifeson"] = "+1 (416) 555-1212";
Quando a otimização de desempenho é necessária, considere usar:
o tipo de matriz é importante na inserção - por exemplo, como um membro da classe.
contêiner associativos não ordenada (unordered_map, entre outros): Mova a sobrecarga do elemento principal () e a pesquisa das constantes hora (possivelmente principal, às vezes menor). Para usar mais duramente corretamente e eficaz, devido a inconveniências e as bordas acutângulo.
vetor classificada. (Consulte: Algoritmos.)
Não use matrizes do C. (Para as APIs mais antigas, use f( vec.data(), vec.size() ); .)
Para outro artigo sobre contêineres, consulte Contêineres da STL.
Tamanhos de contêiner
As tabelas a seguir mostram os tamanhos de contêiner, em bytes, para plataformas x86 e x64. (Para essas finalidades, o ARM de 32 bits é equivalente a x86.) Essas tabelas abordam o modo de versão porque o modo de depuração contém maquinário de verificação que consome espaço e tempo. As colunas são separadas para o Visual C++ 2008 SP1, onde _SECURE_SCL tem como padrão 1, e para Visual C++ 2008 SP1 com _SECURE_SCL definido manualmente como 0 para velocidade máxima. Visual C++ no Visual Studio 2010, Visual C++ no Visual Studio 2012 e Visual C++ no Visual Studio 2013 tem como padrão _SECURE_SCL a 0 (agora conhecido como _ITERATOR_DEBUG_LEVEL).
Tamanhos de contêiner x86 (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> |
N/D |
N/D |
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 |
cadeia de caracteres |
28 |
28 |
28 |
24 |
wstring |
28 |
28 |
28 |
24 |
Tamanhos de contêiner x64 (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> |
N/D |
N/D |
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 |
cadeia de caracteres |
40 |
40 |
40 |
32 |
wstring |
40 |
40 |
40 |
32 |