Contenedores de STL

La biblioteca de plantillas estándar (STL) de la norma ISO proporciona contenedores para almacenar las colecciones de objetos relacionados. Los contenedores son clases de plantillas que permiten la especificación de objetos permitidos en los contenedores.

Nota

Este artículo no se aplica a STL/CLR.Para obtener más información, vea referencia de la biblioteca de STL/CLR.

Los contenedores de STL se pueden dividir en tres categorías: contenedores de secuencias, contenedores asociativos y adaptadores de contenedor.

Contenedores de secuencias

Los contenedores de secuencias mantienen el orden de los elementos insertados que especifique.

Un contenedor de vector se comporta como una matriz, pero puede crecer automáticamente según sea necesario. Su acceso es aleatorio y se almacena de forma contigua, y su longitud es muy flexible. Por estas y otras razones, vector es el contenedor preferido de secuencias para la mayoría de las aplicaciones. Para obtener más información, vea vector (Clase).

Un contenedor de array tiene algunas de las ventajas de vector, pero la longitud no es tan flexible. Para obtener más información, vea array (Clase, STL).

Un contenedor de deque (cola de dos extremos) permite inserciones y eliminaciones rápidas al principio y al final del contenedor. Comparte las ventajas de acceso aleatorio y longitud flexible de vector, pero no es contiguo. Para obtener más información, vea deque (Clase).

Un contenedor de list es una lista doblemente vinculada que permite el acceso bidireccional e inserciones y eliminaciones rápidas en cualquier parte del contenedor, pero no permite tener acceso de forma aleatoria a un elemento en el contenedor. Para obtener más información, vea list (Clase).

Un contenedor de forward_list es una lista vinculada única (la versión de acceso de avance de list). Para obtener más información, vea forward_list (Clase).

Contenedores asociativos

En los contenedores asociativos, los elementos se insertan en un orden predefinido; por ejemplo, por orden ascendente. Los contenedores asociativos sin ordenar también están disponibles. Los contenedores asociativos se pueden agrupar en dos subconjuntos: asignaciones y conjuntos.

Una map, a la que a veces se hace referencia como un diccionario, consta de un par de clave/valor. La clave se utiliza para ordenar la secuencia, y el valor está asociado a esa clave. Por ejemplo, una map podría contener claves que representan cada palabra única en un texto y valores correspondientes que representan el número de veces que aparece cada palabra en el texto. La versión no ordenada de map es unordered_map. Para obtener más información, vea map (Clase) y unordered_map (Clase).

Un set es simplemente es un contenedor ascendente de elementos únicos (el valor también es la clave). La versión no ordenada de set es unordered_set. Para obtener más información, vea set (Clase) y unordered_set (Clase).

Tanto map como set permiten solo una instancia de una clave o elemento en el contenedor. Si se requieren varias instancias de elementos, utilice multimap o multiset. Las versiones no ordenadas son unordered_multimap y unordered_multiset. Para obtener más información, vea multimap (Clase), unordered_multimap (Clase), multiset (Clase) y unordered_multiset (Clase).

Las asignaciones y los conjuntos no ordenados admiten iteradores bidireccionales, y los homólogos no ordenados admiten los iteradores hacia delante. Para obtener más información, vea Iteradores.

Adaptadores de contenedor

Un adaptador de contenedor es una variación de un contenedor de secuencia o asociativo que restringe la interfaz para una mayor simplicidad y claridad. Los adaptadores de contenedor no admiten iteradores.

Un contenedor de queue sigue la semántica de FIFO (primero en entrar, primero en salir). El primer elemento insertado (es decir, insertado en la cola) es el primero en sacarse (es decir, en eliminarse de la cola). Para obtener más información, vea queue (Clase).

Un contenedor de priority_queue se organiza de forma que el elemento que tiene el valor más alto siempre es el primero de la cola. Para obtener más información, vea priority_queue (Clase).

Un contenedor de stack sigue la semántica de LIFO (último en entrar, primero en salir). El último elemento incrustado en la pila es el primer elemento sacado. Para obtener más información, vea stack (Clase).

Dado que los adaptadores de contenedor no admiten iteradores, no se pueden usar con los algoritmos de STL. Para obtener más información, vea Algoritmos.

Requisitos para los elementos de contenedor

Normalmente los elementos insertados en un contenedor de STL pueden ser simplemente de cualquier tipo de objeto si se pueden copiar. Móvil (solo elementos): por ejemplo, los vector<unique_ptr<T>> creados mediante unique_ptr<> funcionarán siempre que no llame a funciones de miembro que intenten copiarlos.

Los destructores no pueden producir excepciones.

Los contenedores asociativos ordenados (descritos anteriormente en este artículo) deben tener un operador de comparación público definido. (De forma predeterminada, el operador es operator<, pero se admiten incluso los que no funcionan con operator<).

Algunas operaciones en los contenedores también podrían requerir un constructor público predeterminado y un operador de equivalencia público. Por ejemplo, los contenedores asociativos sin ordenar requieren la compatibilidad de algoritmos hash y de igualdad.

Elementos contenedores de acceso

El acceso a los elementos de contenedores se realiza mediante iteradores. Para obtener más información, vea Iteradores.

Nota

También puede utilizar bucles for basados en intervalos para recorrer en iteración colecciones STL.

Vea también

Referencia

Biblioteca de plantillas estándar

<sample container>

Seguridad para subprocesos en la biblioteca estándar de C++

Conceptos

Contenedores (C++ moderno)