Contenedores (C++ moderno)
De forma predeterminada, utilice vector como contenedor secuencial predeterminado en C++. Es el equivalente de List<T> en otros lenguajes.
vector<string> v;
v.push_back( "Geddy Lee" );
Utilice map (no unordered_map) como contenedor asociativo predeterminado. Utilice set, multimap, multiset para casos degenerados y múltiples.
map<string, string> phone_book;
// ...
phone_book["Alex Lifeson"] = "+1 (416) 555-1212";
Cuando la optimización del rendimiento es necesaria, considere utilizar:
el tipo de matriz cuando la incrustación es importante (por ejemplo, como miembro de clase).
contenedores asociativos desordenados (unordered_map, etc.): menor sobrecarga por elemento (principal) y búsqueda de tiempo constante (potencialmente mayor, a veces menor). Es más difícil de utilizar de forma correcta y eficaz, debido a los inconvenientes y a la nitidez de los bordes.
vector ordenado. (Vea: Algoritmos).
No use matrices de C. (Para obtener las API más antiguas, utilice f( vec.data(), vec.size() );).
Para consultar otro artículo acerca de contenedores, vea Contenedores de STL.
Tamaños de contenedor
En las tablas siguientes se muestran los tamaños del contenedor, en bytes, para las plataformas x86 y x64. (Para estos fines, ARM de 32 bits equivale a x86). En estas tablas se cubre el modo de lanzamiento porque el modo de depuración contiene la comprobación de la maquinaria, que utiliza espacio y tiempo. Las columnas independientes son para Visual C++ 2008 SP1, donde _SECURE_SCL se estableció en 1 como valor predeterminado y para Visual C++ 2008 SP1 con _SECURE_SCL establecido manualmente en 0 para lograr la velocidad máxima. Visual C++ en Visual Studio 2010, Visual C++ en Visual Studio 2012 y Visual C++ en Visual Studio 2013 cambian _SECURE_SCL a 0 de forma predeterminada (ahora conocido como _ITERATOR_DEBUG_LEVEL).
Tamaños del contenedor 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 |
string |
28 |
28 |
28 |
24 |
wstring |
28 |
28 |
28 |
24 |
Tamaños del contenedor 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 |
string |
40 |
40 |
40 |
32 |
wstring |
40 |
40 |
40 |
32 |