Documentos de Académico
Documentos de Profesional
Documentos de Cultura
STL
La Biblioteca de plantillas estándar (STL) es un conjunto de clases de plantillas
de C ++ para proporcionar estructuras y funciones de datos de programación
comunes, como listas, pilas, matrices, etc. Es una biblioteca de clases de
contenedores, algoritmos e iteradores. Es una biblioteca generalizada y por
lo tanto, sus componentes están parametrizados. Un conocimiento práctico
de las clases de plantillas es un requisito previo para trabajar con STL.
• Algoritmos
• Contenedores
• Funciones
• Iteradores
Algoritmos
Funciones
Contenedores
Funciones Descripción
miembros comunes
constructor Un constructor para crear un contenedor vacío. Por lo general,
predeterminado cada contenedor cuenta con varios constructores que
proporcionan distintos métodos de inicialización.
constructor de Un constructor que inicializa al contenedor para que sea una
copia copia de un contenedor existente del mismo tipo.
destructor La función destructora para encargarse de la limpieza, una vez
que el contenedor ya no sea necesario.
empty Devuelve true si no hay elementos en el contenedor, en caso
contrario devuelve false.
insert Inserta un elemento en el contenedor.
size Devuelve el número de elementos que hay actualmente en el
contenedor.
operator= Asigna un contenedor a otro.
operator< Devuelve true si el primer contenedor es menor que el segundo,
en caso contrario devuelve false.
operator<= Devuelve true si el primer contenedor es menor o igual que el
segundo, en caso contrario devuelve false.
operator> Devuelve true si el primer contenedor es mayor que el segundo,
en caso contrario devuelve false.
operator>= Devuelve true si el primer contenedor es mayor o igual que el
segundo, en caso contrario devuelve false.
operator== Devuelve true si el primer contenedor es igual que el segundo, en
caso contrario devuelve false.
operator!= Devuelve true si el primer contenedor es distinto que el segundo,
en caso contrario devuelve false.
swap Intercambia los elementos de dos contenedores.
Funciones que solo se enecuentran en contenedores de primera clase
max_size Devuelve el número máximo de elementos para un contenedor.
begin Las dos versiones de esta función devuelven ya sea un iterator o
un const_iterator que hace referencia al primer elemento del
contenedor.
end Las dos versiones de esta función devuelven ya sea un iterator o
un const_iterator que hace referencia a la siguiente posición
después del final del contenedor.
rbegin Las dos versiones de esta función devuelven ya sea un
reverse_iterator o un const_revese_iterator que hace referencia
al último elemento del contenedor.
rend Las dos versiones de esta función devuelven ya sea un
reverse_iterator o un const_revese_iterator que hace referencia
a la posición que está antes del primer elemento del contenedor.
erase Elimina uno o más elementos del contenedor.
clear Elimina todos los elementos del contenedor.
La forma de declarar un
vector es muy parecida a
declarar un tipo de dato
vector<string> sentence;
sentence.reserve(5);
solo que hay que indicar el tipo de dato
sentence.push_back("Hello,");
a almacenar, vector<tipo_de_dato>
nombre_del_vector, ejemplo: sentence.push_back("how");
sentence.push_back("are");
vector<int> vectorEnteros; sentence.push_back("you");
sentence.push_back("?");
vector<String> vectorCadenas;
cout<< "max_size(): "<< sentence.max_size()<< endl;
vector<MiTipo> vectorMiTipo; cout<< "size(): "<< sentence.size() << endl;
sentence.insert(find(sentence.begin(),sentence.end(),"?"),
"always");
sentence.back() = "!";
Lista
do
{
cout << "Ingrese un número, 0 para salir: ";
cin >> num;
if (num != 0) lalista.push_back(num);
}
while (num != 0);
while( !lalista.empty() )
{
num = lalista.front();
cout << setw(10) << num << endl;
suma += num;
lalista.pop_front();
}
cout << "----------" << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
Representación grafica Deque
Deque
Un deque se define de forma recursiva:
internamente mantiene una cola de dos
extremos de trozos de tamaño fijo. Cada
fragmento es un vector, y la cola ("mapa" en el
gráfico a continuación) de los trozos en sí es
también un vector.
Deque se implementa normalmente como un
vector de vectores (una lista de vectores no
puede dar acceso aleatorio de tiempo
constante). Si bien el tamaño de los vectores
secundarios depende de la implementación, un
algoritmo común es usar un tamaño constante
en bytes.
cin.get();
}
Deque(Cola )
Contenedor, representado como una sucesión de objetos que limita la forma
en que éstos se añaden a ella, al igual la manera de abandonarla.
Así, una cola sólo permite introducir objetos por un extremo de la sucesión,
final, y la recuperación por el opuesto, frente. Los elementos se ubican en
estricto orden de llegada. (Secuencia FIFO).
int main()
{
queue < int > gquiz;
gquiz.push(10);
gquiz.push(20);
gquiz.push(30);
return 0;
}
Prioridad_queue
#include <queue>
Otro ejemplo, imaginemos #include <list>
class Barco {
La función subirPasajero() public:
void subirPasajero(const Pasajero& pasajero);
debe agregar un pasajero void abandonarBarco(list<Pasajero>& pasajerosEnOrden);
al barco, y private:
priority_queue<Pasajero> pasajeros_;
abandonarBarco() debe };
sacar todos los pasajeros
void Barco::subirPasajero(const Pasajero& pasajero)
del barco y colocarlos (por {
pasajeros_.push(pasajero);
orden de prioridad) en la }
lista que se recibe como
void Barco::abandonarBarco(list<Pasajero>& pasajerosEnOrden)
argumento. {
while (!pasajeros_.empty()) {
pasajerosEnOrden.push_back(pasajeros_.top());
pasajeros_.pop();
}
}
Stack (Pila)
Las pilas son un tipo de adaptadores de contenedor con el tipo de trabajo LIFO
(último en entrar, primero en salir), donde se agrega un nuevo elemento en
un extremo y (arriba) un elemento se elimina solo de ese extremo.
El uso de estructuras de
pila a travez de la plantilla
de clase stack, la cual posee
el mecanismo de operación
necesario para manejar
operaciones de insertar
(push), borrar(pop), entre
otras. La clase stack posee
// programa: pila01.cpp
#include <cstdlib>
En seguida se presenta un ejemplo sumamente #include <iostream>
básico, el cual consiste en crear una pila para #include <stack>
contener elementos de tipo char. Los caracteres se using namespace std;
introducen en orden desde la 'A' hasta la 'Z' y, tal
int main(int argc, char *argv[])
como tiene que ser, al recuperarlos se obtienen en
{
orden inverso, o sea, desde la 'Z' hasta la 'A'.
stack<char> s;
La plantilla de clase actúa como un contenedor para for (int i='A'; i <= 'Z'; i++)
La clasificación se realiza
mediante la tecla de función de comparación compara. Las operaciones de
búsqueda, extracción e inserción tienen complejidad logarítmica. Los
conjuntos se implementan normalmente como árboles rojo-negro.
Los conjuntos
múltiples son un tipo
de contenedores
asociativos similares
a los establecidos,
con la excepción de
que varios elementos
pueden tener los
mismos valores. Son contenedores que almacenan elementos siguiendo un
orden específico, y donde múltiples elementos pueden tener valores
equivalentes.
sut.insert(15);
Internamente, los
sut.insert(22);
elementos de un
conjunto múltiple sut.insert(15);
siguiendo un criterio
de ordenamiento auto itMS = msut.find(10);
débil estricto
específico indicado
por su objeto de comparación interno (del tipo Comparación).
Los conjuntos múltiples se implementan normalmente como árboles de
búsqueda binarios.
Los contenedores de conjuntos múltiples generalmente son más lentos que los
contenedores de múltiples conjuntos desordenados para acceder a elementos
individuales por su clave, pero permiten la iteración directa en subconjuntos
según su orden.
Map
Los mapas se utilizan para replicar matrices asociativas. Los mapas contienen
un par de clave-valor ordenado, en el que cada clave es única y no se puede
cambiar, y se puede insertar o eliminar, pero no se puede modificar. El valor
asociado a las claves puede ser alterado. Podemos buscar, eliminar e insertar
en un mapa dentro de la complejidad de tiempo O(n).
Observe que las claves están ordenadas en orden ascendente, porque los
mapas siempre ordenan sus claves en orden. En caso de que las claves sean
de tipo cadena, se ordenan lexicográficamente.
Multimap
De asociación
Los elementos en contenedores asociativos son referenciados por su clave y
no por su posición absoluta en el contenedor.
Ordenado
Los elementos en el contenedor siguen un orden estricto en todo momento.
Todos los elementos insertados reciben una posición en este orden.
Map
Cada elemento asocia una clave a un valor asignado: las claves están
destinadas a identificar los elementos cuyo contenido principal es el valor
asignado.
Múltiples claves equivalentes
Múltiples elementos en el contenedor pueden tener claves equivalentes.
Asignador-consciente
El contenedor utiliza un objeto de asignación para manejar dinámicamente
sus necesidades de almacenamiento.