la standard template library (stl)

Upload: anonymous-cms0zfm

Post on 24-Feb-2018

232 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/25/2019 La Standard Template Library (STL)

    1/18

    16/10/2015 La Standard Template Library (STL)

    http://decsai.ugr.es/~jfv/ed1/c++/cdrom4/paginaWeb/stl.htm 1/18

    La Standard Template Library (STL) es una coleccin de estructuras de datos genricas y

    algoritmos escritos en C++. STL no es la primera de tales libreras, as la mayor parte de loscompiladores de C++ disponen (o disponan) de libreras similares y, tambin, estn disponiblesvarias libreras comerciales. Uno de los problemas de estas libreras es que son mutuamenteincompatibles, lo que obliga a los programadores a aprender nuevas libreras y a migrar de un

    proyecto a otro y de uno a otro compilador. Sin embargo, STL ha sido adoptado por el comit ANSIde estandarizacin del C++, lo que significa que est (o estar) soportado como una extensin ms dellenguaje por todos los compiladores.

    El diseo de la Standard Template Library es el resultado de varios aos de investigacin

    dirigidos por Alexander Stepanov y Meng Lee de Hewlett-Packard, y David Musser del RensselaerPolytechnic Institute. Su desarrollo se inspir en otras libreras orientadas a objetos y en la experiencia

    de sus creadores en lenguajes de programacin imperativos y funcionales, tales como Ada y Scheme.La STL proporciona una coleccin de estructuras de datos contenedoras y algoritmos

    genricos que se pueden utilizar con stas. Una estructura de datos se dice que es contenedora sipuede contener instancias de otras estructuras de datos. En concreto, la STL dispone de las estructurasindicadas en la tabla siguiente:

    Contenedoreslineales

    Contenedores asociativos Contenedores adaptados

    Vector vector

    Conjunto set

    Pila stack

    Lista

    vector

    Multiconjunto

    multiset

    Cola

    queue

    Doble cola

    deque

    Aplicacin

    map

    Cola de prioridad

    priority_queue

    Multiaplicacin multimap

    Estos contenedores se dice que son genricos porque pueden contener instancias de cualquierotro tipo de dato, para lo que utilizan de forma extensiva los templatesde C++.

    Los contenedores se dividen en tres categoras:

    Contenedores lineales. Almacenan los objetos de forma secuencial permitiendo el acceso a losmismos de forma secuencial y/o aleatoria en funcin de la naturaleza del contenedor.

    Contenedores asociativos. En este caso cada objeto almacenado en el contenedor tiene asociadauna clave. Mediante la clave los objetos se pueden almacenar en el contenedor, o recuperar delmismo, de forma rpida.

  • 7/25/2019 La Standard Template Library (STL)

    2/18

    16/10/2015 La Standard Template Library (STL)

    http://decsai.ugr.es/~jfv/ed1/c++/cdrom4/paginaWeb/stl.htm 2/18

    Contenedores adaptados. Permiten cambiar un contenedor en un nuevo contenedor modificandola interface (mtodos pblicos y datos miembro) del primero. En la mayor parte de los casos, elnuevo contenedor nicamente requerir un subconjunto de las capacidades que proporciona elcontenedor original.

    La adopcin de STL ofrece varias ventajas:v Al ser estndar, est (o estar) disponible por todos los compiladores y plataformas. Esto permitir

    utilizar la misma librera en todos los proyectos y disminuir el tiempo de aprendizaje necesariopara que los programadores cambien de proyecto.

    v El uso de una librera de componentes reutilizables incrementa la productividad ya que los

    programadores no tienen que escribir sus propios algoritmos. Adems, utilizar una librera libre deerrores no slo reduce el tiempo de desarrollo, sino que tambin incrementa la robustez de laaplicacin en la que se utiliza.

    v Las aplicaciones pueden escribirse rpidamente ya que se construyen a partir de algoritmos

    eficientes y los programadores pueden seleccionar el algoritmo ms rpido para una situacin

    dada.v Se incrementa la legibilidad del cdigo, lo que har que ste sea mucho ms fcil de mantener.v Proporciona su propia gestin de memoria. El almacenamiento de memoria es automtico y

    porttil, as el programador ignorar problemas tales como las limitaciones del modelo dememoria del PC.

    Componentes de STL

    La librera STL dispone de cinco componentes diferentes:Algoritmos la STL proporciona una amplia variedad de algoritmos

    comunes entre los que se incluyen los de ordenacin, bsqueday algoritmos numricos. Los algoritmos se pueden utilizar conestructuras de datos de la librera, vectores, o estructuras dedatos definidas por el usuario y provistas de iteradores

    Iteradores una generalizacin del puntero que permite al programadorvisitar cada elemento de una estructura de datos contenedora.

    contenedores estructuras de datos que contienen, y permiten manipular, otrasestructuras de datos.

    funciones objeto varios de los algoritmos proporcionados por la STL, permitenpasar una funcin al algoritmo para adecuar su funcionalidad.Las funciones objeto son una generalizacin del puntero a lafuncin del C

    adaptadores toman un componente y le proporciona una interfacediferente.Esto permite transformar una estructura de dato en otra quetiene las mismas facilidades pero cuya interfaceproporciona unconjunto de operaciones diferente.

    Algoritmos genricos

  • 7/25/2019 La Standard Template Library (STL)

    3/18

    16/10/2015 La Standard Template Library (STL)

    http://decsai.ugr.es/~jfv/ed1/c++/cdrom4/paginaWeb/stl.htm 3/18

    Habitualmente los programadores escriben cdigo que frecuentemente reescriben parautilizarlo en otros programas, ya que en stos se emplean una y otra vez numerosos algoritmoscomunes (algoritmos de bsqueda, algoritmos de ordenacin,...) pero que deben adaptarse a cada

    problema. Es obvio que est es una tarea repetitiva que debe ser eliminada, para lo que debemosproducir algoritmos genricos que puedan ser utilizados en una amplia variedad de situaciones.

    As, existe una gran cantidad de libreras de cdigo reutilizable. Los ejemplos ms comunes yextendidos son las libreras de funciones matemticas y las de funciones de manipulacin de cadenas

    de caracteres. De hecho, los compiladores proporcionan de forma habitual este tipo de libreras. Lacuestin es, por qu ste tipo de libreras tiene xito mientras que otro tipo de libreras no.

    La razn es que tanto las funciones matemticas como las de manipulacin de cadenas de

    caracteres trabajan con un nmero muy limitado de tipos de datos. La mayor parte de las funcionesmatemticas con enteros y valores de punto flotante y las funciones de manipulacin de cadenas decaracteres con una representacin de stas. De manera, que al estar limitado el rango de tipos a utilizarel cdigo fuente de las funciones es fcilmente abordable. Los algoritmos no tienen que rescribirse

    para trabajar con otros tipos de datos, ya que no es aplicable ningn otro tipo de dato. Por tanto,podemos concluir que para producir algoritmos genricos debemos ser capaces de separar los

    algoritmos de la representacin de datos que manipulan.

    Iteradores

    Una de las operaciones ms comunes sobre una estructura de datos contenedora es la de

    recorrer todos o algunos de los elementos almacenados en ella segn un orden predefinido. Uniterador es un objeto que puede retornar por turno una referencia a cada uno de los elementos de uncontenedor.

    Los iteradores son la base de construccin de los algoritmos genricos. As, por ejemplo,podramos escribir el siguiente algoritmo genrico de bsqueda lineal

    template T * linearSearch (T * first, T * last, T & value){for ( first != last first++) if ((*first) == value) returnfirstreturn0}

    Puesto que un iterador permite retornar una referencia a cada uno de los elementos de unaestructura de datos contenedora, podemos como un puntero. Es ms, un iterador debera soportartodas las operaciones que puedan realizarse con un puntero. Estas operaciones se resumen en la tablasiguiente para los iteradoresxeyy el entero n:

    x++ x + n x - y x > y *x

    ++x x n x == y x = y--x x -= n x < y x[n]

    Si somos capaces de disear un iterador que soporte las mismas operaciones que un puntero, se

  • 7/25/2019 La Standard Template Library (STL)

    4/18

    16/10/2015 La Standard Template Library (STL)

    http://decsai.ugr.es/~jfv/ed1/c++/cdrom4/paginaWeb/stl.htm 4/18

    podr utilizar como tal, y ambos sern indistinguibles. Esto es exactamente lo que los diseadores delSTL han hecho, han creado un iterador que generaliza el concepto del puntero y con el que se puedenrealizar las mismas operaciones. El resultado es que en cualquiera de los algoritmos de STL queutilicen iteradores tambin se puede utilizar punteros.

    Como uno de los objetivos de la STL es ser eficiente, no todos los iteradores soportan todas lasoperaciones. Los iteradores se dividen en varias categoras de forma que en cada una de ellasnicamente se proporcionan las operaciones que pueden implementarse de forma eficiente. Cada una

    de las clases contenedoras soporta una o ms tipos de iteradores dependiendo de la eficiencia de lasoperaciones del iterador para cada contenedor. Las categoras de iteradores de la STL son lassiguientes:

    forward iterators Iteradores que pueden avanzar al elemento siguiente.bidirectional iterators Iteradores que pueden avanzar al elemento siguiente o

    retroceder al elemento.random access iterators Iteradores que pueden avanzar o retroceder ms de una

    posicin de una vez.

    Adems de stos, la STL proporciona otras dos clases de iteradores que permiten leer datosdesde un stream a un contenedor y escribir datos desde un contenedor hacia un stream. Losdiseadores de la STL pensaron que si se asociaban iteradores a losstreams, la lectura y escritura dedatos podra ser ms fcilmente manejable con las funciones proporcionadas por la STL. Por otra

    parte, los iteradores asociados a losstreamsno pueden tener todas las operaciones soportadas por losotros tipos de iteradores. Por ejemplo, una vez que se ha escrito un dato en unstreamno es posibleretroceder y escribir otro sobre l. Las dos clases iteradoras adicionales son las siguientes:

    input iterators Iteradores que pueden mover una posicin hacia adelante en untiempo y permiten dereferenciar cuando se utilizan como r-value(en la parte derecha de una asignacin).

    output iterators Iteradores que pueden mover una posicin hacia delante en untiempo y permite dereferenciar cuando se utilizan como l-value(en la parte izquierda de una asignacin).

    Virtualmente todos los algoritmos de la STL utilizan iteradores para indicar el rango deoperadores sobre el que debe operar. De forma similar, todos los contenedores de la STL

    proporcionan iteradores para permitir el acceso a los objetos que contiene. As, comprender los

    iteradores es vital para utilizar de forma efectiva la STL.

    Input iterators

    Los iteradores de entrada slo se pueden mover hacia delante y slo pueden utilizarse pararecuperar valores, no para valores de salida. Los iteradores de entrada a y b soportan las siguientesoperaciones:

    a++ ++a *a (slo como r-value)

    a == b a != b

    Los iteradores de entrada tienen la propiedad de que si ay bson iteradores de entrada sobre un

  • 7/25/2019 La Standard Template Library (STL)

    5/18

    16/10/2015 La Standard Template Library (STL)

    http://decsai.ugr.es/~jfv/ed1/c++/cdrom4/paginaWeb/stl.htm 5/18

    mismo objeto contenedor, y a == b, esto no implica que ++a == ++b. Esto es porque el principalpropsito de los operadores de entrada es utilizarlos como clase base de input streams iterators. Losstream iteratorspermiten manipular streams por medio de iteradores y, por tanto, deben tenerse encuenta las restricciones impuestas por los propiosstreams.

    Output iterators

    Los iteradores de salida, como los de entrada, nicamente se pueden mover hacia delante perodifieren en que slo se pueden dereferenciar para asignar un valor, no para recuperarlo. Un operadorde salida asoporta las operaciones:

    ++a a++ *a (slo como l-value)

    Como los iteradores de entrada, los de salida tambin se utilizan como clase base para outputstreams iterators.Forward iterators

    Los iteradores hacia delante estn diseados para recorrer contenedores cuyos valores puedanser aadidos y recuperados. Esto relaja algunas de las restricciones de los iteradores de entrada/salida

    pero mantienen la restriccin de que nicamente se pueden mover hacia delante. Los iteradores haciadelante ay bsoportan las operaciones:

    A++ ++a *a

    A = b a == b a != b

    Los iteradores hacia delante pueden dereferenciarse para asignar un valor al objetoreferenciado, o bien, para recuperar su valor. Un iterador puede asignar el valor de otro, lo queimplica que se referirn al mismo objeto.

    Bidirectional iterators

    Los iteradores bidireccionales eliminan la restriccin de los anteriores en los que slo se puedeavanzar hacia delante. Los iteradores bidireccioales ay bsoportan las operaciones:

    a++ ++a a-- --a

    *a a = b a == b a != b

    Random access iterators

    Los iteradores de acceso aleatorio eliminan la restriccin de que un iterador slo puede

    avanzar al siguiente elemento, o retroceder al elemento previo, del contenedor en una nica operacin.Los iteradores de acceso aleatorio ay b, ms el entero n, soportan las operaciones:

    a++ a + n a b a > b *a

  • 7/25/2019 La Standard Template Library (STL)

    6/18

    16/10/2015 La Standard Template Library (STL)

    http://decsai.ugr.es/~jfv/ed1/c++/cdrom4/paginaWeb/stl.htm 6/18

    ++a a n a == b a = b

    --a a -= n a < b a[n]

    Un iterador de acceso aleatorio puede incrementarse o decrementarse por un valor entero n yesto es equivalente a incrementar o decrementar el iterador por uno n veces. El operador de ndicea[n]permite retornar el objeto referenciado por el iterador nposiciones hacia delante del iterador a.

    Ejemplos de uso de iteradores

    Los iteradores se pueden utilizar de la misma forma que se utilizan los punteros sobre los

    vectores pero, adems, incorporan una mayor funcionalidad de forma que se pueden utilizar sobrecualquier estructura de datos contenedora definida por la STL. Se vern aqu algunos ejemplos

    sencillos de cmo se utilizan los iteradores en los algoritmos de la STL y contenedores.Sream iterators

    Se utilizarn aqu los tipos de iteradores istream_iteratory ostream_iterator, que como ya seindic derivan de los iteradores de entrada y de salida, respectivamente. De forma, que cuando seutilizan se pueden asociar con cualquierstreamde entrada abierto ostreamde salida.En el primer ejemplo se muestra como se puede copiar el contenido de un stream de entrada a un

    streamde salida mediante iteradores (sin utilizar losstreamsdirectamente).

    #include templatevoid copyToEnd (InputIterator start, InputIterator end, OutputIterator out){ while (start != end) { *out++ = *start++ }}

    main (){

    istream_iterator int_in(cin) ostream_iterator int_out(cout," ") copyToEnd(int_in, istream_iterator(), int_out) cout

  • 7/25/2019 La Standard Template Library (STL)

    7/18

    16/10/2015 La Standard Template Library (STL)

    http://decsai.ugr.es/~jfv/ed1/c++/cdrom4/paginaWeb/stl.htm 7/18

    El constructor para los iteradores de entrada acepta un nico parmetro: una referencia alstreamque debe manipular. En cuanto al constructor para el iterador de salida adems de la referenciaalstreamde salida puede indicrsele, opcionalmente, la cadena de caracteres que se imprimir entrecada par de valores. En nuestro caso, el separador entre cada par de valores enteros es un espacio en

    blanco.

    A la llamada de la funcin copyToEnd debe pasrsele un iterador de entrada que indique laposicin siguiente a la ltima del stream de entrada, ste valor se obtiene mediante la llamada al

    constructor por defecto de la clase istream_iterator.

    En los ejemplos siguientes, veremos como se pueden utilizar los iteradores de entrada/salida enconjuncin con funciones de la STL que requieren como parmetros iteradores.

    En el primero de ellos se utiliza la funcin accumulatepara una serie de valores enteros que seintroducen por la entrada estndar. La funcin acepta dos iteradores que delimiten el rango deelementos a sumar y un valor inicial, y retorna el resultado de sumar el rango de elemento y el valorinicial.

    El siguiente ejemplo utiliza la funcin copypara copiar a la salida estndar las componentes de

    un vector de cadenas de caracteres. La funcin copy copia todos los valores delimitados por los dosprimeros iteradores al objeto referenciado por el tercer iterador. En nuestro caso, los dos primeros sonlas posiciones (punteros) inicial y siguiente a la ltima del vector y el tercer argumento es un iteradorde salida que referencia la salida estndar.

    #include main (){ /*suma los enteros dados por la entrada estndar*/

    istream_iterator intIn(cin) int sum

    sum = accumulate(intIn, istream_iterator(), 0)

    cout

  • 7/25/2019 La Standard Template Library (STL)

    8/18

    16/10/2015 La Standard Template Library (STL)

    http://decsai.ugr.es/~jfv/ed1/c++/cdrom4/paginaWeb/stl.htm 8/18

    En el primer ejemplo se define y utiliza la funcin add10para sumar 10 a todos los elementosde un contenedor, concretamente, de un vector de enteros.

    #include

    templatevoid add10 (ForwardIterator first, ForwardIterator last)

    { while (first != last) { *first = *first + 10 first++ }}

    main (){ constint len = 15 int data[len] ostream_iterator outStream(cout, " ")

    /* inicializacin del vector*/ for (unsigned int i=0 i

  • 7/25/2019 La Standard Template Library (STL)

    9/18

    16/10/2015 La Standard Template Library (STL)

    http://decsai.ugr.es/~jfv/ed1/c++/cdrom4/paginaWeb/stl.htm 9/18

    /* otra forma de escribir la lista l*/

    lItr = l.begin() while (lItr != l.end()) cout

  • 7/25/2019 La Standard Template Library (STL)

    10/18

    16/10/2015 La Standard Template Library (STL)

    http://decsai.ugr.es/~jfv/ed1/c++/cdrom4/paginaWeb/stl.htm 10/18

    ostream_iterator outStream(cout, " ")

    /* inicializacin de la lista l: 1 2 3 4 5 6 7 8 9*/ for (unsigned int i=1 i

  • 7/25/2019 La Standard Template Library (STL)

    11/18

    16/10/2015 La Standard Template Library (STL)

    http://decsai.ugr.es/~jfv/ed1/c++/cdrom4/paginaWeb/stl.htm 11/18

    vector v sin modificar el iterador*/ vItr = v.begin()v.insert(vItr+3, 88) copy(v.begin(), v.end(), outStream)cout

  • 7/25/2019 La Standard Template Library (STL)

    12/18

    16/10/2015 La Standard Template Library (STL)

    http://decsai.ugr.es/~jfv/ed1/c++/cdrom4/paginaWeb/stl.htm 12/18

    Un vector est implementando con como un bloque de memoria contiguo de forma similar aun array. Las caractersticas de un vector incluyen:

    q Inserciones y borrados en tiempo constante al principio y al final.q Inserciones y borrados de coste lineal en posiciones intermedias.q Gestin automtica de memoria.

    Cuando se crea el vector se asigna espacio para los elementos y si es necesario se

    redimensiona, automticamente, el tamao del vector.

    Operaciones para el tipo de dato vector

    Constructores

    vector v Constructor por defecto O(1)

    vector (int, T) Constructor con tamao y valor inicial dados O(n)

    vector v (aVector) Constructor de copia O(n)

    Acceso a elementos

    v[i] Acceso por ndice, tambin puede asignarse O(1)

    v.front() Primer valor de la coleccin O(1)

    v.back() ltimo valor de la coleccin O(1)

    Insercin

    v.push_front (T) Aade un elemento al principio del vector O(1)v.push_back (T) Aade un elemento al final del vector O(1)

    v.insert (iterator, T) Inserta un nuevo elementos antes del iterador O(n)

    v.swap (vector) Intercambia valores con otro vector O(n)

    Borrado

    v.pop_front () Borra el primer elemento del vector O(1)

    v.pop_back () Borra el ltimo elemento del vector O(1)

    v.erase (iterator) Borra el elemento indicado por el iterador O(n)

    v.erase (iterator, iterator) Borra un rango de valores O(n)Tamao

    v.capacity () Nmero mximo de elementos del buffer O(1)

    v.size () Nmero de elementos en el vector O(1)

    v.resize (unsigned, T) Cambia el tamao, rellenando con un valor O(n)

    v.reserve (unsigned) Pone el tamao del buffer O(n)

    v.empty () Cierto si el vector est vaco O(1)

    Iteradores

    vector::iterator itr Declara un nuevo iterador O(1)v.begin () Iterador que referencia al primer elemento O(1)

    v.end () Iterador que referencia al siguiente al ltimo O(1)

    vector::reverse_iterator Declara un nuevo reverse_iterator

  • 7/25/2019 La Standard Template Library (STL)

    13/18

    16/10/2015 La Standard Template Library (STL)

    http://decsai.ugr.es/~jfv/ed1/c++/cdrom4/paginaWeb/stl.htm 13/18

    ritr

    v.rbegin () Reverse_iterator que referencia al ltimoelemento

    O(1)

    v.rend () Reverse_iterator que referencia al anterior alprimero

    O(1)

    Algoritmos genricos tiles con vectores

    fill (itetator start, iterator stop, value)

    Rellena el vector con un valor dadocopy (iterator start, iterator stop, iterator destination)

    Copia una secuencia en otromax_element (iterator start, iterator stop)

    Busca el mayor valor de la coleccinmin_element (iterator start, iterator stop)

    Busca el menor valor de la coleccinreverse (iterator start, iterator stop)

    Invierte los elementos en la coleccincount (iterator start, iterator stop, value, counter)

    Cuenta el nmero de elementos que coinciden con el valor e incrementa el contadorcount (iterator start, iterator stop, unary function counter)Cuenta el nmero de elementos que satisfacen la funcin e incrementa el contador

    transform (iterator start, iterator stop, iterator destination, unary function)

    Transforma los elementos utilizando la funcin y los situa en el destino indicadotind (iterator start, iterator stop, value)

    Busca un valor en la coleccin retornado un iterador a ste, si no lo encuentra retorna stopfind_if (iterator start, iterator stop, unary function)

    Busca un valor que satisfaga la funcin retornado un iterador, si no lo encuentra retornastopreplace (iterator start, iterator stop, value, replacement value)

    Reemplaza todas las ocurrencias del valor con el valor de reemplazamientoreplace (iterator start, iterator stop, unary function, replacement value)

    Reemplaza todas las ocurrencias que satisfacen la funcin con el valor dereemplazamiento

    sort (iterator start, iterator stop)

    Coloca los elementos en orden ascendentefor_each (iterator start, iterator stop, function)

    Aplica la funcin a cada elemento de la coleccin

  • 7/25/2019 La Standard Template Library (STL)

    14/18

    16/10/2015 La Standard Template Library (STL)

    http://decsai.ugr.es/~jfv/ed1/c++/cdrom4/paginaWeb/stl.htm 14/18

    iter_swap (iterator, iterator)

    Intercambia los valores especificados por ambos iteradores

    Algoritmos genricos tiles con vectores ordenados

    merge (itetator start1, iterator stop1, iterator start2, iterator stop2, iterator dest)

    Mezcla dos colecciones ordenadas en una tercerainplace_merge (iterator start, iterator center, iterator destination)

    Mezcla dos secuencias ordenadas y adyacentes en unabinary_search (iterator start, iterator stop, value)

    Busca el valor en la coleccin, retorna un booleanolower_bound (iterator start, iterator stop, value)

    Busca la primera ocurrencia de un elemento mayor o igual al valor, retorna un iterador

    upper_bound (iterator start, iterator stop)Busca la primera ocurrencia de un elemento estrictamente mayor que valor, retorna uniterador

    Listas

    El tipo de dato list se presenta como una lista doblemente enlazada pudindose iterar en

    ambos sentidos. Entre los diferentes tipos de operaciones que proporcionan las listas destacan:

    q Inserciones y borrados en tiempo constante al principio y al final.q Inserciones y borrados en tiempo constante en posiciones intermedias.

    Operaciones para el tipo de dato list

    Constructores y asignacin list v Constructor por defecto O(1)

    list l (aList) Constructor de copia O(n)

    l = aList Asignacin O(n)

    Acceso a elementos

    l.front() Primer valor de la coleccin O(1)

    l.back() ltimo valor de la coleccin O(1)

    Insercin y borrado

    l.push_front (T) Aade un elemento al principio de la lista O(1)l.push_back (T) Aade un elemento al final de la lista O(1)

    l.insert (iterator, T) Inserta un nuevo elementos antes del iterador O(1)

    l.swap (list) Intercambia valores con otra lista O(1)

  • 7/25/2019 La Standard Template Library (STL)

    15/18

    16/10/2015 La Standard Template Library (STL)

    http://decsai.ugr.es/~jfv/ed1/c++/cdrom4/paginaWeb/stl.htm 15/18

    Constructores y asignacin

    pair p Constructor por defecto O(1)

    pair p (T1,T2) Constructor con dos argumentos O(1)

    pair p(aPair) Constructor de copia O(1)

    rea de datos (pblicos) T1 first Nombre de la variable donde se guarda el primerelemento del par

    T2 second Nombre de la variable donde se guarda el segundoelemento del par

    l.pop_front () Borra el primer elemento de la lista O(1)

    l.pop_back () Borra el ltimo elemento de la lista O(1)

    l.remove(T) Eliminar todos los elementos iguales a uno dado O(n)

    l.remove_if(predicate) Eliminar todos los valores que cumplan unacondicin

    O(n)

    l.erase (iterator) Borra el elemento indicado por el iterador O(1)

    l.erase (iterator, iterator) Borra un rango de valores O(1)

    Tamao

    l.size () Nmero de elementos en la lista O(n)

    l.empty () Cierto si la lista est vaca O(1)

    Iteradores

    list::iterator itr Declara un nuevo iterador O(1)

    l.begin () Iterador que referencia al primer elemento O(1)

    l.end () Iterador que referencia al siguiente al ltimo O(1)list::reverse_iterator ritr Declara un nuevo reverse_iterator

    l.rbegin () Reverse_iterator que referencia al ltimoelemento

    O(1)

    l.rend () Reverse_iterator que referencia al anterior alprimero

    O(1)

    Otros mtodos

    l.reverse() Invierte la lista O(n)

    l.sort() Ordena los elementos de menor a mayor O(nlogn)

    l.merge(list) Mezcla con otra lista ordenada O(n)l.sort(comparision) Ordena los elementos segn una funcin O(nlogn)

    Map y Multimap

    Un map es una secuencia de pares (clave, valor) ordenados de menor a mayor en funcin de la

    clave. Las claves son nicas, esto es, cada clave tiene asociado un slo valor. El tipo de iterador sobre

    esta clase de contenedores es bidireccional. Los componentes de un map son elementos de la clasepair, que tiene las siguientes caractersticas:

    Operaciones para el tipo de dato pair

  • 7/25/2019 La Standard Template Library (STL)

    16/18

    16/10/2015 La Standard Template Library (STL)

    http://decsai.ugr.es/~jfv/ed1/c++/cdrom4/paginaWeb/stl.htm 16/18

    Funciones Nombre de la variable donde se guarda el segundoelemento del par

    make_pair (T1,T2) Crea un par con los argumentos

    Hay que sealar que map es una secuencia de pares pair, y por lo tanto lositeradores para maps iteran sobre pares.

    Un multimap es un map con la diferencia de que se permite la duplicidad de claves.Para utilizar estas clases hay que incluir las libreras y .Operaciones para el tipo de dato map y multimap

    Constructores y asignacin map m Constructor por defecto O(1)

    multimap m Constructor por defecto O(1)

    map m (aMap) Constructor de copia O(n)

    multimapm(aMultimap)

    Constructor de copia O(n)

    m = aMap Asignacin O(n)

    Insercin y borrado

    m[key] (slo para map) Devuelve una referencia al valor asociado a key O(log n)

    m.insert(key_value_pair) Inserta un par con clave y valor dados O(log n)

    m.erase(key) Borra valor con clave asociada key O(log n)

    m.erase(iterator) Borra el valor al que apunta un iterador O(log n)

    Pruebas de inclusin

    m.size () Nmero de elementos de la coleccin O(n)

    m.empty () Cierto si la coleccin est vaca O(1)

    m.count(key) Nmero de elementos con clave key O(log n)

    m.find(key) Iterador sobre elemento con una clave dada O(log n)

    m.lower_bound(key)(slo para multimap)

    Iterador sobre la primera ocurrencia de un elementocon clave key

    O(log n)

  • 7/25/2019 La Standard Template Library (STL)

    17/18

    16/10/2015 La Standard Template Library (STL)

    http://decsai.ugr.es/~jfv/ed1/c++/cdrom4/paginaWeb/stl.htm 17/18

    m.upper_bound(key)(slo para multimap)

    Iterador sobre el siguiente elemento despus delltimo con clave key

    O(log n)

    m.equal_range(key)(slo para multimap)

    Par de iteradores formado por lower_bound yupper_bound

    O(log n)

    Iteradores

    map::iterator itr Declara un nuevo iterador O(1)

    m.begin () Iterador que referencia al primer elemento O(1)m.end () Iterador que referencia al siguiente al ltimo O(1)

    map::reverse_iterator ritr

    Declara un nuevo reverse_iterator

    m.rbegin () Reverse_iterator que referencia al ltimo elemento O(1)

    m.rend () Reverse_iterator que referencia al anterior alprimero

    O(1)

    Strings

    String es una clase que ofrece facilidades para el manejo de cadenas de caracteres. En C o

    C++, las cadenas estn representadas por el tipo de dato char * y existen libreras como que contienen funciones que facilitan su uso. En la STL este tipo de funciones estn implementadas

    bajo la clase string (para utilizar strings se incluir la librera ).Operaciones para el tipo de dato string

    Constructores

    string s Constructor por defeto

    string s ( hola) Constructor con inicializador

    string s (aString) Constructor de copia

    Acceso a elementos

    s[i] Acceso al elemento i-simo del string

    s.substr(int pos,int len) Subcadena que comienza en pos y tiene longitud

    lens.c_str() Devuelve una cadena estilo C igual al string

    Insercin y borrado

    s.insert(int pos,string str) Insetar antes de pos el string str

    s.erase (int start, int len) Eliminar desde s[start] hasta s[start+len]

    s.replace(int start, int len,str) Sustituir desde s[start] hasta s[start+len] por str

    Longitud

    s.length() Longitud del string

    s.resize(int,char) Cambia el tamao, rellenando con un valors.empty() Cierto si el string es vaco

    Asignacin

  • 7/25/2019 La Standard Template Library (STL)

    18/18

    16/10/2015 La Standard Template Library (STL)

    s = s2 Asignacin de strings

    s += s2 Concatenacin de strings

    s + s2 Nuevo string resultado de concatenar s y s2Comparaciones s ==s2 s != s2 Igualdad y desigualdad de strings

    s < s2 s s2 s >= s2 Comparaciones de strings (orden lexicogrfico)Iteradores

    string::iterator itr Declara un nuevo iterador

    s.begin () Iterador que referencia al primer elemento

    s.end () Iterador que referencia al siguiente al ltimo

    string::reverse_iterator ritr Declara un nuevo reverse_iterator

    s.rbegin () Reverse_iterator que referencia al ltimoelemento

    s.rend () Reverse_iterator que referencia al anterior alprimero

    Operaciones de bsqueda s.find(string str, int pos) Devuelve la posicin en donde comienza la

    subcadena str desde s[pos].

    s.find_first_of(str,pos) Posicin en donde se encuentra el primer carcterque pertenece a str desde s[pos].

    s.find_first_not_of(str,pos) Posicin en donde se encuentra el primer carcter

    que no est en str desde s[pos].s.find_last_of(str,pos) Posicin en donde se encuentra el ltimo carcter

    que pertenece a str desde s[pos].

    s.find_las_not_of(str,pos) Posicin en donde se encuentra el ltimo carcterque no est en str desde s[pos].

    Operaciones E/S stream >> str Entrada de strings

    stream