Primeros pasos con Standard Template Library de C++
C++ es un lenguaje fuertemente tipado, lo que quiere decir que a todas las variables y funciones debemos indicarle el tipo de dato que tienen que guardar, devolver o recibir.
Pero cuando empezamos a programar nos damos cuenta que hay distintas estructuras de datos y distintos algoritmos que tienen el mismo aspecto y hacen las mismas cosas pero que son independientes al tipo de datos con el que se está trabajando. Por ejemplo, un conjunto de datos funciona exactamente igual tanto si los datos son enteros o cadenas de caracteres, es decir, el tipo de dato no importa.
Otro ejemplo es la utilización de una estructura cola con una estructura pila, no importa que tengan números enteros, reales, cadenas de caracteres, objetos de una clase, etcétera, ya que en una cola vamos añadiendo elementos, y cuando los sacamos lo hacemos desde el principio, y en una pila vamos añadiendo elementos, y cuando los sacamos lo hacemos desde el final. En ambos casos, el comportamiento no depende del tipo de datos utilizados.
Las plantillas en C++ nos permiten definir operaciones y estructuras de datos, independientemente del tipo de datos. Con una plantilla podemos definir una cola, una pila, un vector o un conjunto de datos, y será el programador el que cuando cree esa estructura en el programa principal, indicará qué tipo de datos va a guardar.
Esto es lo que posibilita en C++ la programación genérica, que no es más que programar independientemente al tipo de datos que posteriormente vayamos a utilizar.
Qué es el Standard Template Library de C++
La Standard Template Library (STL) es una serie de librerías de C++ que ofrecen una colección de plantillas y algoritmos para trabajar con esas estructuras genéricas. Permite a los programadores implementar fácilmente estructuras de datos genéricas, como colas (queues), listas (lists), pilas (stacks), etcétera, y ofrece, además, tres elementos:
- Contenedores: son las estructuras de datos genéricos.
- Algoritmos: ofrece algunos algoritmos comunes que pueden tener los contenedores, como un algoritmo de ordenación.
- Iteradores: permiten ir recorriendo estas estructuras de datos.
Si queréis acceder a más información sobre STL, podéis hacerlo en esta web.
Contenedores de STL
Los contenedores son las plantillas que nos ofrecen estructuras de datos genéricas y existen varios tipos:
- Contenedores de secuencia
Implementan estructuras de datos a las que se puede acceder de forma secuencial, como, por ejemplo, un vector, una lista, matrices, etc. Son estructuras de datos genéricas que cuando las utilicemos debemos indicar el tipo de dato que va a guardar.
- Adaptadores de contenedores
Ofrecen un comportamiento similar dependiendo del tipo de dato. Podemos tener una lista, pero si la lista se comporta de una determinada manera es una cola, y si se comporta de otra manera es una pila., incluso podemos tener una cola con prioridad. Utilizando los contenedores de frecuencia añadimos distintos comportamientos.
- Contenedores asociativos
Nos permiten guardar datos en conjuntos o mapas, siendo los primeros conjuntos de datos en los que no se repite ninguno, y los segundos son parecidos a los diccionarios de otros lenguajes de programación, donde guardamos pares de información en clave-valor.
- Contenedores asociativos desordenados
Son similares a los anteriores, pero con la diferencia que los datos no están ordenados.
Algoritmos de STL
STL también nos ofrece algunos algoritmos y funciones que trabajan sobre los contenedores, que ofrecen diversas operaciones:
- Ordenación.
- Búsqueda.
- Comprobación, por ejemplo, para comprobar si todos los elementos del contenedor cumplen una condición, o algunos o ninguno.
- Partición, para trabajar con conjuntos y subconjuntos de elementos.
Iteradores de STL
Los iteradores son elementos que nos ofrece la librería para poder recorrer o posicionarnos en los alimentos que se guardan en los contenedores. Es como un puntero que nos permite movernos por los elementos de un contenedor para leerlos o para cambiarlos.