La librería de plantillas STL La librería STL es un poderoso aliado a la hora de codificar sistemas que requieran estructuras de datos, como arrays, listas, pilas, colas, mapas, etcétera. En este capítulo, veremos cómo hacer uso de ella y, así, mejorar notablemente nuestra productividad.
▼
La librería STL ........................... 2
▼
Las clases contenedoras ............ 2
La clase stack .................................... 8 La clase queue ................................... 9 La clase map ................................... 10
La clase vector................................... 2 La clase list........................................ 5
▼
Resumen................................... 12
Servicio de atención al lector:
[email protected]
2
APÉNDICE C. LA LIBRERÍA DE PLANTILLAS STL
La librería STL Hemos visto cómo implementar una lista enlazada independiente del tipo de dato que maneje, y sería lógico preguntarse: ¿acaso algo tan importante y necesario no viene implementado en alguna librería del lenguaje? La respuesta es sí. Existe una librería que acompaña a la mayor parte de los compiladores modernos de C++, llamada STL (Standard Template Library o Librería estándar de plantillas). Pero la librería STL no solo posee una plantilla de listas enlazadas; es mucho más que eso. Incorpora diversas estructuras de datos, como arrays, listas, pilas, colas, mapas, mapas tipo hash, etcétera; además, clases contenedores, iteradores y algoritmos para utilizar con estas estructuras. Todo esto, codificado de un modo genérico y haciendo uso de, fundamentalmente, las plantillas.
Las clases contenedoras Un contenedor es un objeto que tiene como finalidad encapsular otro objeto en su interior y ofrecer métodos para poder acceder a él o a ellos. STL incorpora diversas clases de este tipo, y es posible acceder a los objetos contenidos por medio de iteradores. A continuación, veremos algunas de estas clases.
La clase vector La clase vector es una clase contenedora que implementa un array dinámico, es decir que puede expandirse dinámicamente a medida que lo requiramos. Veamos cómo utilizarlo: #include using namespace std;
Para poder hacer uso de esta estructura, debemos incluir la cabecera vector (sin el .h) y luego haremos uso del espacio de nombres std (o, en su defecto, anteponer std:: a cada referencia al tipo de dato en cuestión).
www.redusers.com
3
C++
Así creamos un objeto tipo vector: vector vez;
Como podemos apreciar, no hemos detallado un tamaño específico de array, ya que, en este caso, crecerá dinámicamente a medida que le insertemos elementos. Insertar y remover elementos en la cola de una clase vector lleva siempre el mismo tiempo; sin embargo, hacerlo en otro lado hará que el tiempo varíe linealmente con la ubicación. Para agregar elementos por la cola del array, tendremos que utilizar el método push_back: // Inserto un número cualquiera vec.push_bacck(15); // Inserto otro número vec.push_back(10); // y otro número vec.push_back(5);
Para extraer elementos de la cola del array, debemos emplear el método pop_back como se muestra en las siguientes líneas de código: // Elimino el último elemento vec.pop_back();
Para acceder a un elemento arbitrario del array, lo hacemos por medio del operador [], que se encuentra sobrecargado para mejorar la facilidad de uso de la estructura y su similitud con un array convencional. // Accediendo al primer elemento cout