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:

  1. el tipo de matriz cuando la incrustación es importante (por ejemplo, como miembro de clase).

  2. 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.

  3. 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

Vea también

Otros recursos

Aquí está otra vez C++ (C++ moderno)

Referencia de lenguaje C++

Referencia de biblioteca estándar de C++