STL: Standard Template Library - Departamento de Ingeniería de

Anuncio
STL: Standard
Template Library
Estructuras de Datos
Andrea Rueda
Pontificia Universidad Javeriana
Departamento de Ingeniería de Sistemas
STL
Standard Template Library
STL (Standard Template Library)
●
●
●
¡Librería con “muchas cosas” genéricas!
Provee un conjunto de clases comunes, usables
con cualquier tipo de dato y con operaciones
elementales.
Tres componentes:
●
Contenedores (containers).
●
Algoritmos (algorithms).
●
Iteradores (iterators).
www.bogotobogo.com/cplu
splus/stl_vector_list.php
http://www.sgi.com/tech/stl
STL (Standard Template Library)
Componentes:
●
●
●
Contenedores: clases predefinidas para
almacenamiento de datos.
Algoritmos: operaciones básicas como
búsqueda y ordenamiento.
Iteradores: permiten recorrer los datos en los
contenedores (similar a apuntadores).
http://www.sgi.com/tech/stl
STL (Standard Template Library)
¿Cómo se conectan estos conceptos?
www.bogotobogo.com/cplusplus/stl3_iterators.php
http://www.sgi.com/tech/stl
Contenedores STL
●
Contenedores secuenciales estándar:
●
De acceso aleatorio:
- vector: Arreglos dinámicos.
(std::vector ↔ #include <vector>)
- deque: Cola de doble cabeza, inserción/eliminación
en cabeza y cola.
(std::deque ↔ #include <deque>)
●
De acceso iterativo:
- list: Doblemente encadenada.
(std::list ↔ #include <list>)
Contenedores STL
●
Contenedores como interfaz
(container adaptors):
- queue: cola, primero que entra, primero que sale.
(std::queue ↔ #include <queue>)
- stack: pila, último que entra, primero que sale.
(std::stack ↔ #include <stack>)
- priority_queue: cola de prioridad.
(std::priority_queue ↔ #include <queue>)
Contenedores STL
●
Contenedores asociativos:
- set: conjunto matemático, operaciones de unión,
intersección, diferencia; requiere función de
comparación.
(std::set ↔ #include <set>)
- map: arreglo asociativo, provee mapeo de un dato
(clave) a otro (valor); requiere función de
comparación para la clave.
(std::map ↔ #include <map>)
Iteradores STL
●
Objeto que puede iterar entre un rango de
elementos predefinido a través de operadores:
–
Input iterator : extrae datos, movimiento hacia
adelante.
–
Output iterator : almacena datos, movimiento hacia
adelante.
–
Forward iterator : almacena y extrae datos,
movimiento hacia adelante.
–
Bidirectional iterator : almacena y extrae datos,
movimiento hacia adelante y hacia atrás.
–
Random-access iterator : almacena y extrae datos,
acceso a elementos en cualquier orden.
Iteradores STL
●
Operaciones:
- Operador *: (dereferenciación) funciona como
un apuntador, retorna el contenido del iterador.
- Operadores ++ y ­­: mueve el iterador a la
siguiente posición o a la anterior posición.
- Operadores == y !=: comparación de
iteradores, si apuntan o no al mismo elemento.
- Operador =: asigna una nueva posición al
iterador (usualmente principio o fin del
contenedor).
Iteradores STL
Operaciones
*
* =
++
­­
== , !=
=
Input
iterator
✔
✘
✔
✘
✔
✔
Output
iterator
✘
✔
✔
✘
✘
✔
Forward
iterator
✔
✔
✔
✘
✔
✔
Bidirectional
iterator
✔
✔
✔
✔
✔
✔
Randomaccess
iterator *
✔
✔
✔
✔
✔
✔
* además soporta operaciones de acceso aleatorio: +n, ­n, <, >, <=, >=, +=, ­=, []
Contenedores e Iteradores STL
●
Cada contenedor incluye funciones básicas para
usar con el operador =
–
begin(): iterador que representa el inicio de los
elementos.
–
end(): iterador que representa el elemento después
del final.
–
cbegin(): iterador constante (sólo lectura) que
representa el inicio de los elementos.
–
cend(): iterador constante (sólo lectura) que
representa el elemento después del final.
Contenedores e Iteradores STL
●
Cada contenedor incluye funciones básicas para
usar con el operador =
–
rbegin(): representa el inicio en la secuencia
inversa.
–
rend(): representa el elemento después del final en
la secuencia inversa.
–
crbegin(): iterador constante, representa el inicio
en la secuencia inversa.
–
crend(): iterador constante, representa el elemento
después del final en la secuencia inversa.
Contenedores e Iteradores STL
●
Cada contenedor tiene varios tipos de
iteradores:
–
–
–
–
container::iterator
iterador de lectura/escritura (entrada/salida).
container::const_iterator
iterador de sólo lectura (entrada).
container::reverse_iterator
iterador en secuencia inversa de lectura/escritura
(entrada/salida).
container::const_reverse_iterator
iterador en secuencia inversa de sólo lectura
(entrada).
Iteradores inválidos
●
Después de algunas operaciones en los
contenedores, los iteradores pueden resultar
inválidos:
* Cambiar el tamaño o la capacidad.
* Algunas inserciones y/o eliminaciones:
–
Iteradores singulares: sin asociar a un contenedor.
–
Iteradores después del final.
–
Iteradores fuera de rango.
–
Iterador colgante: apunta a un elemento no
existente, en otra ubicación o no accesible.
–
Iteradores inconsistentes.
Ejercicios
Ejercicio 1
●
(Individual) en un archivo de código fuente:
–
Declarar un vector, una deque y una list.
–
Rellenar cada uno con 50 números aleatorios
(diferentes en cada estructura):
●
●
vector sólo por el final.
deque y list por ambos extremos (uno al inicio, otro al
final).
–
Recorrer e imprimir cada una en orden y en orden
inverso.
–
En cada una, insertar un nuevo valor en una
posición aleatoria, y eliminar dos valores en
posiciones aleatorias, volver a imprimir en orden.
Referencias
●
www.sgi.com/tech/stl
●
www.cplusplus.com
●
●
●
●
http://www.learncpp.com/cpp-programming/16-3stl-iterators-overview/
http://www.cs.northwestern.edu/~riesbeck/progra
mming/c++/stl-iterators.html
http://www.cprogramming.com/tutorial/stl/iterators
.html
http://www.angelikalanger.com/Conferences/Slid
es/CppInvalidIterators-DevConnections-2002.pdf
Descargar