PDF de programación - Librería estándar de plantillas (STL) (bw)

Imágen de pdf Librería estándar de plantillas (STL) (bw)

Librería estándar de plantillas (STL) (bw)gráfica de visualizaciones

Publicado el 3 de Mayo del 2017
784 visualizaciones desde el 3 de Mayo del 2017
413,1 KB
5 paginas
Creado hace 13a (07/07/2011)
La librera estÆndar

Librera estÆndar
de plantillas (STL)

Juan Hernando Vieites



La librera estÆndar

Un pequeæo ejemplo: Un programa que lee una lista de nœmeros de la entrada

estÆndar y los imprime ordenados:

#include <vector>
#include <iterator>
#include <algorithm>
#include <iostream>
int main(int argc, char *argv[])
{
using namespace std;
vector<int> v;
istream_iterator<int> entrada(cin);
istream_iterator<int> fin;
copy(entrada, fin, back_insert_iterator<vector<int> >(v));
sort(v.begin(), v.end());
copy(v.begin(), v.end(), ostream_iterator<int>(cout, " "));
std::cout << std::endl;
}



La librera estÆndar de plantillas de C++ (Standard Template Library,

STL) es un conjunto de clases y funciones genØricas.
Los componentes de la STL se agrupan en 5 clases:

Contenedores
Iteradores
Algoritmos
Objetos funcin (functors)
Objetos para manejo de memoria

La filosofa de diseæo principal de la STL es proporcionar utilidades

lo mÆs genØricas posibles, por esto, todos los componentes son
clases y funciones de plantilla



Contenedores

Un contenedor es un objeto que puede almacenar otros objetos.
Para que un objeto pueda ser contenido se le suponen algunas
propiedades dependiendo del tipo de contenedor. En general y
simplificando, basta con que:
Se pueda crear con un constructor por defecto (sin argumentos)
Se pueda copiar
Y se pueda asignar

Todos los tipos primitivos (int, char, float, double, ), los punteros y

la clase std::string pueden usarse en contenedores.

Los streams no se pueden copiar, por eso no se pueden usar

directamente.



Tipos de iteradores

Iteradores de entrada

Los iteradores se clasifican en 5 grupos dependiendo del tipo

de operaciones que soportan
Iteradores de entrada
Iteradores de salida

Iteradores hacia delante

Iteradores bidireccionales
Iteradores aleatorios

Todos los iteradores soportan construccin por defecto, por
copia, asignacin y comparacin. La comparacin entre dos
iteradores es cierta s y slo si apuntan al mismo elemento.



En iterador de entrada es un iterador que se puede usar para

acceder al valor del elemento al que apunta y para incrementarlo
para pasar al siguiente elemento de la coleccin.

Siendo i un iterador de tipo X, las operaciones que soporta (ademÆs

de las mencionadas antes) son:
Acceso al elemento apuntado: *i
Preincremento: ++i
Postincremento: i++
Acceso al elemento apuntado con postincremento: *i++

Ninguna de las operaciones anteriores se puede efectuar con un

iterador que apunta a la posicin especial de fin (el resultado puede
ser cualquier cosa, desde valores indefinidos a una violacin de
segmento).



Iteradores de salida

Iteradores hacia delante

En iterador de salida es un iterador que se puede usar para

modificar el valor del elemento al que apunta e incrementarlo para
pasar al siguiente elemento de la coleccin.

Siendo i un iterador de tipo X, y t un objeto del tipo apuntado, las

operaciones que soporta son:
Asignacin al elemento apuntado: *i = t
Preincremento: ++i
Postincremento: i++
Modificacin del elemento apuntado con postincremento:

*i++ = t

Como antes, ninguna de las operaciones anteriores se puede
efecturar con el iterador de fin. Usar *i para leer el contenido
apuntado no estÆ definido.



Un iterador hacia delante es un iterador de entrada y salida a la

vez. Este es el tipo bÆsico de iterador que se utiliza en la
mayora de los casos.

Soporta tanto las operaciones del iterador de entrada como el

de salida.

Los iteradores hacia delante pueden ser a su vez inmutables o

modificables.
Modificables: los habituales, sin restricciones adicionales

Inmutables: el objeto apuntado es constante, por lo que no

se puede modificar.



Iteradores bidireccionales

Iteradores aleatorios

Los iteradores bidireccionales son iteradores hacia delante que

ademÆs soportan las operaciones siguientes:
Predecremento: --i
Postdecremento: i--

Estas operaciones s se pueden efectuar sobre el iterador de

posicin de fin siempre y cuando haya un elemento anterior, es
decir, que el iterador no apunte al principio de la coleccin o la
coleccin este vaca.

Los iteradores aleatorios son iteradores bidireccionales que ademÆs proporcionan
acceso aleatorio a cualquier posicin. Las siguientes operaciones con este tipo de
iteradores son vÆlidas
Suma: i += n, i + n, n + i el resultado es un iterador
Resta: i = n, i n, n i, el resultado es un iterador
Diferencia: i j, el resultado es la distancia entre i y j
Indexacin: i[n], acceder al elemento n-Øsimo desde i
Asignacin indexada: i[n] = t, modificar el elemento n-Øsimo desde j
Menor que: i < j, cierto si se puede llegar a j desde i.

X es el tipo del iterador, i y j iteradores, D es el tipo que mide la distancia entre

iteradores (normalmente un entero sin signo), n un objeto de tipo D y t un objeto del
tipo apuntado.



Incrementar un iterador mÆs allÆ de una posicin valida (es decir, por detrÆs del
comienzo o despuØs del fin) o acceder a una de esas posiciones es errneo y el
resultado es indefinico.



Operaciones con

contenedores

Operaciones con secuencias

Todos los objetos que son un modelo del concepto Contenedor poporcionan

Las secuencias son contenedores en los que los elementos estÆn almacenados en

los siguientes operaciones (X es el tipo del contenedor y a y b objetos de
ese tipo):
Constructor por defecto, de copia y asignacin.

Las copias siempre copian el contenedor origen elemento a elemento

a.begin(), a.end(): iteradores para recorrer el contenedor

a.size(): tamaæo actual del contenedor (nœmero de elementos

que contiene).

a.max_size(): mÆximo tamaæo que el contenedor puede llegar a tener.
a.empty(): lgicamente igual que a.size() == 0, pero puede ser mÆs rÆpido.

a.swap(b): intercambia dos contenedores, mÆs rÆpido que hacerlo con un objeto

temporal intermedio (c = a; a = b; b = c);

Comparaciones: a == b, a != b, a < b, a > b,

a <= b, a >= b. Comparacin elemento a elemento en el orden en
el que los iteradores recorren los contenedores.



Operaciones con secuencias

(continuacin)
Insercin: a.insert(i, t), inserta una copia de t antes de i (i puede ser a.end())
Insercin con tamaæo: a.insert(i, n, t), inserta n copias de t antes de la posicin

apuntada por i

Insercin por rango: a.insert(i, p, q), donde p y q son iteradores de entrada que

apuntan a objetos convertibles al tipo almacenado. Inserta una copia de [p, q)
antes de i.

Eliminacin: a.erase(i), elimina el elemento apuntado por i
Eliminacin de rango: a.erase(i,j), elimina todos los elementos en el rango [i,j)
Vaciado: a.clear(), elimina todos los elementos del contenedor.
Redimensionado con valor inicial: a.resize(n, t), redimensiona el contenedor

para que su tamaæo sea n. Si es necesario insertar nuevos elementos lo hace
copiando t tantas veces como haga falta

Redimensionado: a.resize(n), redimensiona el contenedor para que su

tamaæo sea n. Si hay que crear nuevos elementos utiliza su
constructor por defecto.



orden lineal estricto, como en los arrays.

Las secuencias soportan insercin y eliminacin de elementos.
Siendo X el tipo del contenedor, a un objeto contenedor, i y j iteradores de tipo

X::iterator, t un objeto del tipo almacenado por X y n un nœmero entero (u objeto
convertible a tal), las operaciones vÆlidas para una secuencia son:
Constructor con valor inicial y tamaæo: X a(n, t), crea una secuencia de tamaæo n con

n copias del objeto t.

Constructor con tamaæo: X a(n), crea una secuencia de tamaæo n usando el

constructor por defecto del tipo almacenado

Constructor de rango: X(p, q), donde p y q son iteradores de entrada que apuntan a

objetos convertibles al tipo almacenado. Crea una secuencia copiando los elementos
en el rango [p, q).

Acceso al primer elemento: a.front() devuelve el primer elemento de la secuencia.

(continua en la siguiente transparencia)



Operaciones con secuencias

Existen dos tipos adicionales de secuencias que aæaden algunas operaciones

a las anteriores: secuencias con insercin frontal e insercin posterior.

Las secuencias de insercin frontal son list y deque y aæaden las siguientes

operaciones.
Insercin al comienzo: a.push_front(t), equivalente a a.insert(a.begin(), t)

pero con garanta de eficiencia.

Eliminacin del primero: a.pop_front(), como a.erase(a.begin()) pero con garanta de

eficiencia.

Las secuencias de insercin trasera son list, deque y vector. Las operaciones aæadidas

son:
Insercin al final: a.push_back(t), equivalente a a.insert(a.end(), t) pero

con garanta de eficiencia.

Eliminacin del œltimo: a.pop_back(), como a.erase(--a.end()) pero con

garanta de eficiencia.

Acceso al œltimo: a.back(), devuelve el œltimo elemento de la secuencia.
  • Links de descarga
http://lwp-l.com/pdf3308

Comentarios de: Librería estándar de plantillas (STL) (bw) (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad