Contenedores de Plantilla de la Biblioteca Estándar de C++
La biblioteca STD de C++ (Standard Template Library, Biblioteca de Plantillas Estándar) provee un conjunto de "**contenedores**", es decir, objetos que permiten almacenar otros objetos. De esta manera es posible implementar fácilmente estructuras de datos estándar como colas, listas o pilas. Los contenedores están abstraídos y parametrizados en función del tipo de datos que se desea almacenar en ellos, por lo cual su interface general es similar en todos los casos y no depende de qué tipo de información se desee almacenar dentro.
La STL de C++ proporciona dos tipos de contenedores:
Contenido |
[editar] Contenedores Secuenciales
"Contenedores Secuenciales" o simplemente secuencias, son los contenedores que almacenan una secuencia de objetos, que puede ser recorrida parcialmente o de inicio a fin.
- Vectores
- Listas
- Colas Bidireccionales
- Listas unidireccionales (sólo en C++11)
[editar] Contenedores Asociativos
"Contenedores Asociativos" son los contenedores que almacenan un valor o conjunto de valores asociándolo a una clave.
- Diccionarios
- Multidiccionarios
- Conjuntos
- Multiconjuntos
- Diccionarios, multidiccionarios, Conjuntos y multiconjuntos no-ordenados (sólo en C++11 o en compiladores de C++ que incorporan el post-estándar TR1).
[editar] Adaptadores y Pseudo-Contenedores
Adicionalmente, la biblioteca estándar de C++ proporciona muchos contenedores no-STL. Estos pueden ser considerados pseudo-contenedores, pero no cumplen todos los requerimientos de los contenedores de la STL.
- Adaptadores de Contenedores
- Pseudo-contenedores
[editar] Utilización
La idea tras la STL de C++ es que la parte complicada de usar estructuras complejas de datos esté completada y sea transparente al programador y al usuario final. Si un programador desea utilizar una pila de enteros, todo lo que tiene que hacer es usar este código:
stack<int> myStack;
- ---
Con un esfuerzo mínimo, el programador puede ahora agregar y eliminar enteros en su pila. A través de la abstracción de las plantillas STL de C++, el programador puede especificar cualquier tipo de dato, no sólo enteros. La plantilla de clases Stack de STL proporciona la funcionalidad genérica de una pila, independientemente del tipo de dato subyacente que va a ser almacenado.
Aparte de la interfase de las plantillas de clase que comprende los contenedores, que incluye funciones genéricas como size para obtener la cantidad de elementos almacenada en un contenedor, o las funciones begin y end que entregan iteradores (pseudo-punteros) para recorrer los elementos de éstos, los contenedores de C++ pueden ser usados de varias maneras.
La STL proporciona un montón de útiles algoritmos en la cabecera <algorithm>, abstracciones de funciones que permiten realizar tareas genéricas como ordenar un contenedor, buscar un dato en un contenedor ordenado o realizar una tarea con cada elemento de un contenedor -- funciones parametrizadas que pueden ser utilizados en gran variedad de contenedores y estructuras de datos.
Todos los contenedores soportan iteradores, una abstracción de punteros que permite iterar sobre un contenedor y acceder a sus elementos de una manera limpia y ordenada, en base a la interfase de STL. Casi todos los algoritmos, por ejemplo, operan en una sunsecuencia o subconjunto usando iteradores. Esto proporciona un modo genérico de iterar sobre contenedores STL u otras estructuras de datos.
La cabecera <functional> define functoides (objetos función) y adaptadores de función (funciones que crean functoides), con los cuales es posible definir y personalizar las tareas que se pueden llevar a cabo en los datos accesados por un iterador.