SlideShare uma empresa Scribd logo
1 de 43
Baixar para ler offline
2.2 STL y los Contenedores
          Básicos

         Apoyo SSD5
Descripción de STL

 • C++ incluye un extenso conjunto de
   bibliotecas, en particular, la Biblioteca
   de Plantillas Estándar (STL) conocida en
   inglés como Standard Template Library.
 • STL ofrece componentes de propósito
   general para tareas comunes de
   programación.


                 Mtl. Lourdes Cahuich          2
Descripción de STL

 •   Estos componentes se caracterizan
     por su flexibilidad, eficiencia, y bases
     teóricas. La biblioteca está organizada
     en tres abstracciones principales:

     1. Contenedores
     2. Iteradores
     3. Algoritmos

                   Mtl. Lourdes Cahuich         3
Descripción de STL

 • Los contenedores incluyen cadenas de
   caracteres, vectores, listas, conjuntos,
   pilas, etc.
 • Los contenedores están organizados
   como una colección de clases de C++
   independientes.




                  Mtl. Lourdes Cahuich        4
Descripción de STL

 • Todas las clases contenedoras de STL
   son plantillas (templates), y por lo
   tanto pueden acomodar elementos de
   tipos arbitrarios.
 • Existe una grande y bien organizada
   colección de algoritmos de STL que
   desempeñan muchas de las tareas que
   podríamos esperar ver manejadas por
   una función miembro
                Mtl. Lourdes Cahuich      5
Descripción de STL

 • Por ejemplo, existe una función
   universal remove() que trabaja en
   todos los tipos de contenedores.
 • Otro ejemplo de los algoritmos de STL
   son los métodos para buscar,
   acomodar, reemplazar y otras
   operaciones funcionales


                 Mtl. Lourdes Cahuich      6
Descripción de STL

 • El acceso a los elementos almacenados
   en un contenedor siempre está mediado
   por iteradores, un tipo de arreglo
   índice o un apuntador generalizado.
 • A diferencia de otras bibliotecas
   similares, STL se enfoca fuertemente en
   abstracciones algorítmicas.


                 Mtl. Lourdes Cahuich        7
Descripción de STL

 • Su implantación recae fuertemente en
   plantillas (templates), pero usa un
   poco de las funciones virtuales y de
   herencia.
 • Como consecuencia, la eficiencia de los
   componentes de STL por lo general
   iguala a la de los componentes
   desarrollados usando el código
   tradicional de C++.
                 Mtl. Lourdes Cahuich        8
Descripción de STL

 • Es mejor pensar en STL como una
   extensión del lenguaje en lugar de una
   biblioteca tradicional.
 • Estructuras de datos más complicadas
   que no son parte de la biblioteca, como
   grafos y tablas hash, pueden ser
   construidas fácilmente sobre los
   componentes existentes de STL.

                 Mtl. Lourdes Cahuich        9
Descripción de STL

 • El uso de los componentes de la
   biblioteca permite a los diseñadores de
   una clase, enfocarse en el desarrollo
   conceptual del diseño y en la
   funcionalidad de la clase nueva, en
   lugar de pasar mucho tiempo
   programando y depurando las
   estructuras estándar


                 Mtl. Lourdes Cahuich        10
Contenedores
Contenedores estándar

 • Los contenedores estándar están
   disponibles a través de los siguientes
   archivos de encabezado (también
   conocidos como archivos de cabecera),
   cuyos nombres indican el tipo de
   contenedor correspondiente.




                 Mtl. Lourdes Cahuich       12
#include <string> // strings
#include <vector> // arrays
#include <list>
// cyclic doubly linked lists
#include <deque>
// hybrid list/array
#include <queue> // queue
#include <stack> // stack
#include <bitset> // bit-vectors
#include <set> // general sets
#include <map>
// associative arrays
             Mtl. Lourdes Cahuich   13
Contenedores estándar

 • En el siguiente listado se observa el
   soporte de cálculos numéricos.

 #include <complex> //complex numbers
 #include <valarray> //numerical arrays
 #include <numeric> //numerical algorithms
 #include <cmath> //math functions




                  Mtl. Lourdes Cahuich       14
Iteradores
Contenedores estándar - iteradores

 • Los iteradores ofrecen una interfaz
   uniforme entre los contenedores y los
   algoritmos en STL.
 • Los iteradores son modelados a partir
   de apuntadores sencillos de C++.




                 Mtl. Lourdes Cahuich      16
Contenedores estándar - iteradores

 • En particular, los operadores
   operator*, operator++ entre otros,
   son sobrecargados apropiadamente, por
   lo que el uso de iteradores es muy
   similar al uso de apuntadores.




                 Mtl. Lourdes Cahuich      17
Contenedores estándar - iteradores

 • Por ejemplo, en el siguiente listado se
   muestra el idioma estándar para
   recorrer un contenedor e imprimir sus
   elementos.




                  Mtl. Lourdes Cahuich       18
string A = quot;This is a stringquot;;
string::iterator it;
//create iterator
for (it = A.begin(); it != A.end(); ++it)
{
     cout << *it << endl;
}


                Mtl. Lourdes Cahuich        19
Contenedores estándar - iteradores

 • Aquí it es un iterador adecuado para el
   contenedor A.
 • Las funciones miembro A.begin() y
   A.end() regresan los iteradores, uno
   apuntando al primer elemento en A, y
   el otro apuntando a quot;uno-después-del-
   finalquot;, significando una posición
   hipotética que podría ser ocupada por
   el último elemento si se agregara al
   contenedor otro elemento
                 Mtl. Lourdes Cahuich        20
for (it = A.begin(); it != A.begin()      + 10; ++it)

{
    cout << *it << endl;
}




                   Mtl. Lourdes Cahuich                 21
Algoritmos
Algoritmos de STL

 • El núcleo de STL es su extensa
   colección de algoritmos.
 • Debido a que los iteradores forman
   la interfaz entre los contenedores y los
   algoritmos en STL, los algoritmos son
   (en su mayor parte) implantados como
   funciones libres


                    Mtl. Lourdes Cahuich      23
Algoritmos de STL

 • Usar funciones libres en lugar de funciones
   miembro tiene el efecto deseado de reducir
   su número considerablemente.
 • En algunos casos especiales, uno puede ser
   forzado a usar funciones miembro, ya sea
   porque el iterador no puede proveer
   suficiente información, o por razones de
   eficiencia. (como veremos, la operación
   erase y la clase list de STL son ejemplos)


                    Mtl. Lourdes Cahuich         24
Algoritmos de STL

 • A través del curso, examinaremos
   muchos de los algoritmos de STL.
 • Para el contenedor string, vale la
   pena examinar las funciones replace
   y reverse.
 • La función replace sustituye todas las
   ocurrencias de un elemento con un
   valor particular, por otro valor

                    Mtl. Lourdes Cahuich    25
Cómo Usar el Contenedor vector
           de STL
Un Vector Como una Clase de Arreglo

 • La clase vector brinda una alternativa
   segura y con muchas características
   para un arreglo.
 • Similar a un arreglo, un vector
   almacena secuencialmente series de
   objetos de tipos de datos idénticos.




                Mtl. Lourdes Cahuich        27
Usando Vector como un arreglo

 • Debido a que es un contenedor de STL,
   la clase vector soporta programación
   genérica.
 • Podemos crear un vector que almacena
   enteros, cadenas de caracteres, o uno
   que almacena cualquier otro tipo
   primitivo o definido por el usuario


                Mtl. Lourdes Cahuich       28
Usando Vector como un arreglo

 • Los arreglos pueden ser peligrosos de
   usar debido a que no brindan
   funcionalidad al programador.
 • Al usar arreglos, el programador es
   responsable de crear cualquier
   funcionalidad de alto nivel, como
   cambiar el tamaño o revertir el arreglo.


                 Mtl. Lourdes Cahuich         29
Usando Vector como un arreglo

 • Estas implantaciones pueden ser
   riesgosas y si no son codificadas
   correctamente, pueden introducir leves
   errores en una aplicación.
 • Los vectores son una alternativa más
   segura para los arreglos, debido a que
   proveen funciones miembro que
   implantan estas (y otras) tareas de alto
   nivel
                 Mtl. Lourdes Cahuich         30
#include <string>
#include <cstdlib>
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char* argv[]) {
    vector<int> v1;
    vector<double> v2;
    vector<bool> v3;
    vector<string> v4;
    return EXIT_SUCCESS;
}
             Mtl. Lourdes Cahuich    31
Usando Vector como un arreglo

 • Observa que para poder usar objetos
   de tipo vector, tenemos que incluir la
   biblioteca que define la clase vector.
 • Es interesante notar que también
   podemos declarar un vector de objetos
   vector.




                 Mtl. Lourdes Cahuich       32
Usando Vector como un arreglo

 • Esto provee una implantación para una
   estructura de datos bidimensional como
   una matriz

 vector<vector<int> > matrix;




                Mtl. Lourdes Cahuich        33
Usando Vector como un arreglo

 • Para evitar confusión con el operador
   >> , la mayoría de los compiladores
   dejan un espacio siguiendo el primer
   signo de mayor que (>).
 • Esto aplica para cualquier declaración
   anidada de plantillas (templates), no
   sólo para vectores de vectores.


                 Mtl. Lourdes Cahuich       34
Usando Vector como un arreglo

 • La clase vector contiene un conjunto de
   constructores que los programadores
   pueden usar para establecer el tamaño
   inicial del vector y los valores iniciales
   de los elementos.




                  Mtl. Lourdes Cahuich          35
#include <string>
#include <cstdlib>
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char* argv[]) {
    vector<int> v1; // initially empty
    vector<int> v2(5);
    // 5 elements, initialized to 0
    vector<int> v3(10, 1);
    // 10 elements, initialized to 1
    vector<int> v4(v3);
     // v4 is a copy of v3
    return EXIT_SUCCESS;
}
                  Mtl. Lourdes Cahuich   36
Usando Vector como un arreglo

 • Podemos acceder a los elementos
   almacenados en un vector de diferentes
   maneras.
 • Primero, la clase vector sobrecarga el
   operator[].
 • Esto nos permite acceder elementos
   usando una sintaxis similar a la de
   subíndices de un arreglo

                 Mtl. Lourdes Cahuich       37
Usando Vector como un arreglo

 • Al igual que el acceso por subíndices, el
   operator[] sobrecargado de la clase
   vector no brinda una revisión del acceso
   fuera de los límites.
 • Cuando se requiere la revisión de los
   límites, debemos usar el método at().




                 Mtl. Lourdes Cahuich          38
Usando Vector como un arreglo

 • También existen métodos de acceso
   especial para el primer y último
   elemento de un arreglo

 vector<int> v(10);
 v[1] = 2;
 v.at(2) = 45;
 v.front() = v.back();
                Mtl. Lourdes Cahuich   39
Usando Vector como un arreglo

 • Además de proveer las funciones
   miembro estándar discutidas
   anteriormente, la clase vector también
   brinda algunas otras funciones que
   seguramente no esperaríamos que sean
   parte de una clase de arreglo




                Mtl. Lourdes Cahuich        40
Usando Vector como un arreglo

 • Por ejemplo, el método push_back
   agrega un dato al final del vector.
 • Este método automáticamente aumenta
   el tamaño del vector para acomodar el
   nuevo elemento.
 • El método pop_back desempeña la
   tarea opuesta.


                Mtl. Lourdes Cahuich       41
Usando Vector como un arreglo

 • Esta función miembro elimina el último
   elemento del vector, reduciendo su
   tamaño en uno.
 • La función empty despliega true si el
   vector contiene cero elementos, y
   false en caso contrario




                 Mtl. Lourdes Cahuich       42
// An initially empty
 vectorvector<int> v;
// push elements in
for (int i = 0; i < 5; i++) {
    v.push_back(i);
    cout << quot;Size: quot; << v.size() << endl;
}
// pop elements off
for (int j = 0; j < 5; j++) {
    v.pop_back();
    cout << quot;Size: quot; << v.size() << endl;
}
cout << endl << v.empty() << endl;

                Mtl. Lourdes Cahuich        43

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

Java interface
Java interfaceJava interface
Java interface
 
Data Type Conversion in C++
Data Type Conversion in C++Data Type Conversion in C++
Data Type Conversion in C++
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de control
 
Intro to c++
Intro to c++Intro to c++
Intro to c++
 
Topdown parsing
Topdown parsingTopdown parsing
Topdown parsing
 
Interfaces in java
Interfaces in javaInterfaces in java
Interfaces in java
 
Interfaces and abstract classes
Interfaces and abstract classesInterfaces and abstract classes
Interfaces and abstract classes
 
02 data types in java
02 data types in java02 data types in java
02 data types in java
 
MPI
MPIMPI
MPI
 
First steps in C-Shell
First steps in C-ShellFirst steps in C-Shell
First steps in C-Shell
 
Cp command in Linux
Cp command in LinuxCp command in Linux
Cp command in Linux
 
Package in Java
Package in JavaPackage in Java
Package in Java
 
Procesos Planificacion de los Sistemas Operativos
 Procesos Planificacion de los Sistemas Operativos Procesos Planificacion de los Sistemas Operativos
Procesos Planificacion de los Sistemas Operativos
 
Type Systems
Type SystemsType Systems
Type Systems
 
Introduction to c++ ppt 1
Introduction to c++ ppt 1Introduction to c++ ppt 1
Introduction to c++ ppt 1
 
C program
C programC program
C program
 
Polymorphism and its types
Polymorphism and its typesPolymorphism and its types
Polymorphism and its types
 
Fortran 90 Basics
Fortran 90 BasicsFortran 90 Basics
Fortran 90 Basics
 
OOP Unit 1 - Foundation of Object- Oriented Programming
OOP Unit 1 - Foundation of Object- Oriented ProgrammingOOP Unit 1 - Foundation of Object- Oriented Programming
OOP Unit 1 - Foundation of Object- Oriented Programming
 
Algoritmos recursivos
Algoritmos recursivosAlgoritmos recursivos
Algoritmos recursivos
 

Semelhante a 7 Stl Y Los Contenedores Basicos

5 Mecanismos Reuntilizacion Abstraccion Cont
5 Mecanismos Reuntilizacion Abstraccion Cont5 Mecanismos Reuntilizacion Abstraccion Cont
5 Mecanismos Reuntilizacion Abstraccion ContUVM
 
Centro de estudios_tecnologicos_industrial_y_de_servicios
Centro de estudios_tecnologicos_industrial_y_de_serviciosCentro de estudios_tecnologicos_industrial_y_de_servicios
Centro de estudios_tecnologicos_industrial_y_de_serviciosandreadelacruz002
 
Centro de estudios_tecnologicos_industrial_y_de_servicios
Centro de estudios_tecnologicos_industrial_y_de_serviciosCentro de estudios_tecnologicos_industrial_y_de_servicios
Centro de estudios_tecnologicos_industrial_y_de_serviciosMaztherprozh
 
9 Colas
9 Colas9 Colas
9 ColasUVM
 
Bibliotecas mas importantes en c++
Bibliotecas mas importantes en c++Bibliotecas mas importantes en c++
Bibliotecas mas importantes en c++carmenmc2017
 
Bibliotecas mas importantes en c++
Bibliotecas mas importantes en c++Bibliotecas mas importantes en c++
Bibliotecas mas importantes en c++carmenmc2017
 
bibliotecasolibreriasenc-170322144450-1.pdf
bibliotecasolibreriasenc-170322144450-1.pdfbibliotecasolibreriasenc-170322144450-1.pdf
bibliotecasolibreriasenc-170322144450-1.pdfssuser948499
 
Bibliotecas o librerias_para_c_
Bibliotecas o librerias_para_c_Bibliotecas o librerias_para_c_
Bibliotecas o librerias_para_c_Oziel Solis Juarez
 
Bibliotecas o libreria de c++
Bibliotecas o libreria de c++Bibliotecas o libreria de c++
Bibliotecas o libreria de c++Idalia Tristan
 
Bibliotecas para c_
Bibliotecas para c_Bibliotecas para c_
Bibliotecas para c_Maztherprozh
 
10 Pilas
10 Pilas10 Pilas
10 PilasUVM
 
Stl bliblioteca de plantillas estandar
Stl bliblioteca de plantillas estandarStl bliblioteca de plantillas estandar
Stl bliblioteca de plantillas estandarAnabel Duarte
 
3 Tipos De Datos
3 Tipos De Datos3 Tipos De Datos
3 Tipos De DatosUVM
 
19 Contenedores De Stl Basados En Arboles
19 Contenedores De Stl Basados En Arboles19 Contenedores De Stl Basados En Arboles
19 Contenedores De Stl Basados En ArbolesUVM
 

Semelhante a 7 Stl Y Los Contenedores Basicos (20)

5 Mecanismos Reuntilizacion Abstraccion Cont
5 Mecanismos Reuntilizacion Abstraccion Cont5 Mecanismos Reuntilizacion Abstraccion Cont
5 Mecanismos Reuntilizacion Abstraccion Cont
 
Centro de estudios_tecnologicos_industrial_y_de_servicios
Centro de estudios_tecnologicos_industrial_y_de_serviciosCentro de estudios_tecnologicos_industrial_y_de_servicios
Centro de estudios_tecnologicos_industrial_y_de_servicios
 
Centro de estudios_tecnologicos_industrial_y_de_servicios
Centro de estudios_tecnologicos_industrial_y_de_serviciosCentro de estudios_tecnologicos_industrial_y_de_servicios
Centro de estudios_tecnologicos_industrial_y_de_servicios
 
9 Colas
9 Colas9 Colas
9 Colas
 
librerias.pptx
librerias.pptxlibrerias.pptx
librerias.pptx
 
Bibliotecas mas importantes en c++
Bibliotecas mas importantes en c++Bibliotecas mas importantes en c++
Bibliotecas mas importantes en c++
 
Bibliotecas mas importantes en c++
Bibliotecas mas importantes en c++Bibliotecas mas importantes en c++
Bibliotecas mas importantes en c++
 
bibliotecasolibreriasenc-170322144450-1.pdf
bibliotecasolibreriasenc-170322144450-1.pdfbibliotecasolibreriasenc-170322144450-1.pdf
bibliotecasolibreriasenc-170322144450-1.pdf
 
Bibliotecas o librerias_para_c_
Bibliotecas o librerias_para_c_Bibliotecas o librerias_para_c_
Bibliotecas o librerias_para_c_
 
BIBLIOTECAS PARA C++
BIBLIOTECAS PARA C++BIBLIOTECAS PARA C++
BIBLIOTECAS PARA C++
 
Bibliotecas o libreria de c++
Bibliotecas o libreria de c++Bibliotecas o libreria de c++
Bibliotecas o libreria de c++
 
Bibliotecas de-c
Bibliotecas de-cBibliotecas de-c
Bibliotecas de-c
 
Biblioteca
BibliotecaBiblioteca
Biblioteca
 
Bibliotecas para c++
Bibliotecas para c++Bibliotecas para c++
Bibliotecas para c++
 
Bibliotecas para c_
Bibliotecas para c_Bibliotecas para c_
Bibliotecas para c_
 
10 Pilas
10 Pilas10 Pilas
10 Pilas
 
Stl bliblioteca de plantillas estandar
Stl bliblioteca de plantillas estandarStl bliblioteca de plantillas estandar
Stl bliblioteca de plantillas estandar
 
3 Tipos De Datos
3 Tipos De Datos3 Tipos De Datos
3 Tipos De Datos
 
19 Contenedores De Stl Basados En Arboles
19 Contenedores De Stl Basados En Arboles19 Contenedores De Stl Basados En Arboles
19 Contenedores De Stl Basados En Arboles
 
Tipo c++
Tipo c++Tipo c++
Tipo c++
 

Mais de UVM

Tiempo compartido en programación
Tiempo compartido en programaciónTiempo compartido en programación
Tiempo compartido en programaciónUVM
 
Portafolio de evidencias del curso Programación Avanzada
Portafolio de evidencias del curso Programación AvanzadaPortafolio de evidencias del curso Programación Avanzada
Portafolio de evidencias del curso Programación AvanzadaUVM
 
Eficiencia en uso tiempo
Eficiencia en uso  tiempoEficiencia en uso  tiempo
Eficiencia en uso tiempoUVM
 
Administración de memoria arreglos dinamicos
Administración de memoria arreglos dinamicosAdministración de memoria arreglos dinamicos
Administración de memoria arreglos dinamicosUVM
 
Practica de arreglos
Practica de arreglosPractica de arreglos
Practica de arreglosUVM
 
Otra introducción a apuntadores
Otra introducción a apuntadoresOtra introducción a apuntadores
Otra introducción a apuntadoresUVM
 
Ejemplo de solución de práctica funciones stl
Ejemplo de solución de práctica funciones stlEjemplo de solución de práctica funciones stl
Ejemplo de solución de práctica funciones stlUVM
 
Breve repaso de apuntadores
Breve repaso de apuntadoresBreve repaso de apuntadores
Breve repaso de apuntadoresUVM
 
Arreglos conceptos básicos
Arreglos conceptos básicosArreglos conceptos básicos
Arreglos conceptos básicosUVM
 
Resolución práctica de tipos de datos
Resolución práctica de tipos de datosResolución práctica de tipos de datos
Resolución práctica de tipos de datosUVM
 
Resumen de funciones
Resumen de funcionesResumen de funciones
Resumen de funcionesUVM
 
Biblioteca estándar de funciones
Biblioteca estándar de funcionesBiblioteca estándar de funciones
Biblioteca estándar de funcionesUVM
 
Manejo de bits
Manejo de bitsManejo de bits
Manejo de bitsUVM
 
Aclaración de dudas 4 de septiembre
Aclaración de dudas 4 de septiembreAclaración de dudas 4 de septiembre
Aclaración de dudas 4 de septiembreUVM
 
Aclaraciones varias a códigos entregados en sesión 3
Aclaraciones varias a códigos entregados en sesión 3Aclaraciones varias a códigos entregados en sesión 3
Aclaraciones varias a códigos entregados en sesión 3UVM
 
Funciones definidas por el usuario
Funciones definidas por el usuarioFunciones definidas por el usuario
Funciones definidas por el usuarioUVM
 
Función main()
Función main()Función main()
Función main()UVM
 
Depuración de un programa en c++
Depuración de un programa en c++Depuración de un programa en c++
Depuración de un programa en c++UVM
 
Algunas dudas de la sesión 28 agosto
Algunas dudas de la sesión 28 agostoAlgunas dudas de la sesión 28 agosto
Algunas dudas de la sesión 28 agostoUVM
 
Estructura programa c++
Estructura programa c++Estructura programa c++
Estructura programa c++UVM
 

Mais de UVM (20)

Tiempo compartido en programación
Tiempo compartido en programaciónTiempo compartido en programación
Tiempo compartido en programación
 
Portafolio de evidencias del curso Programación Avanzada
Portafolio de evidencias del curso Programación AvanzadaPortafolio de evidencias del curso Programación Avanzada
Portafolio de evidencias del curso Programación Avanzada
 
Eficiencia en uso tiempo
Eficiencia en uso  tiempoEficiencia en uso  tiempo
Eficiencia en uso tiempo
 
Administración de memoria arreglos dinamicos
Administración de memoria arreglos dinamicosAdministración de memoria arreglos dinamicos
Administración de memoria arreglos dinamicos
 
Practica de arreglos
Practica de arreglosPractica de arreglos
Practica de arreglos
 
Otra introducción a apuntadores
Otra introducción a apuntadoresOtra introducción a apuntadores
Otra introducción a apuntadores
 
Ejemplo de solución de práctica funciones stl
Ejemplo de solución de práctica funciones stlEjemplo de solución de práctica funciones stl
Ejemplo de solución de práctica funciones stl
 
Breve repaso de apuntadores
Breve repaso de apuntadoresBreve repaso de apuntadores
Breve repaso de apuntadores
 
Arreglos conceptos básicos
Arreglos conceptos básicosArreglos conceptos básicos
Arreglos conceptos básicos
 
Resolución práctica de tipos de datos
Resolución práctica de tipos de datosResolución práctica de tipos de datos
Resolución práctica de tipos de datos
 
Resumen de funciones
Resumen de funcionesResumen de funciones
Resumen de funciones
 
Biblioteca estándar de funciones
Biblioteca estándar de funcionesBiblioteca estándar de funciones
Biblioteca estándar de funciones
 
Manejo de bits
Manejo de bitsManejo de bits
Manejo de bits
 
Aclaración de dudas 4 de septiembre
Aclaración de dudas 4 de septiembreAclaración de dudas 4 de septiembre
Aclaración de dudas 4 de septiembre
 
Aclaraciones varias a códigos entregados en sesión 3
Aclaraciones varias a códigos entregados en sesión 3Aclaraciones varias a códigos entregados en sesión 3
Aclaraciones varias a códigos entregados en sesión 3
 
Funciones definidas por el usuario
Funciones definidas por el usuarioFunciones definidas por el usuario
Funciones definidas por el usuario
 
Función main()
Función main()Función main()
Función main()
 
Depuración de un programa en c++
Depuración de un programa en c++Depuración de un programa en c++
Depuración de un programa en c++
 
Algunas dudas de la sesión 28 agosto
Algunas dudas de la sesión 28 agostoAlgunas dudas de la sesión 28 agosto
Algunas dudas de la sesión 28 agosto
 
Estructura programa c++
Estructura programa c++Estructura programa c++
Estructura programa c++
 

7 Stl Y Los Contenedores Basicos

  • 1. 2.2 STL y los Contenedores Básicos Apoyo SSD5
  • 2. Descripción de STL • C++ incluye un extenso conjunto de bibliotecas, en particular, la Biblioteca de Plantillas Estándar (STL) conocida en inglés como Standard Template Library. • STL ofrece componentes de propósito general para tareas comunes de programación. Mtl. Lourdes Cahuich 2
  • 3. Descripción de STL • Estos componentes se caracterizan por su flexibilidad, eficiencia, y bases teóricas. La biblioteca está organizada en tres abstracciones principales: 1. Contenedores 2. Iteradores 3. Algoritmos Mtl. Lourdes Cahuich 3
  • 4. Descripción de STL • Los contenedores incluyen cadenas de caracteres, vectores, listas, conjuntos, pilas, etc. • Los contenedores están organizados como una colección de clases de C++ independientes. Mtl. Lourdes Cahuich 4
  • 5. Descripción de STL • Todas las clases contenedoras de STL son plantillas (templates), y por lo tanto pueden acomodar elementos de tipos arbitrarios. • Existe una grande y bien organizada colección de algoritmos de STL que desempeñan muchas de las tareas que podríamos esperar ver manejadas por una función miembro Mtl. Lourdes Cahuich 5
  • 6. Descripción de STL • Por ejemplo, existe una función universal remove() que trabaja en todos los tipos de contenedores. • Otro ejemplo de los algoritmos de STL son los métodos para buscar, acomodar, reemplazar y otras operaciones funcionales Mtl. Lourdes Cahuich 6
  • 7. Descripción de STL • El acceso a los elementos almacenados en un contenedor siempre está mediado por iteradores, un tipo de arreglo índice o un apuntador generalizado. • A diferencia de otras bibliotecas similares, STL se enfoca fuertemente en abstracciones algorítmicas. Mtl. Lourdes Cahuich 7
  • 8. Descripción de STL • Su implantación recae fuertemente en plantillas (templates), pero usa un poco de las funciones virtuales y de herencia. • Como consecuencia, la eficiencia de los componentes de STL por lo general iguala a la de los componentes desarrollados usando el código tradicional de C++. Mtl. Lourdes Cahuich 8
  • 9. Descripción de STL • Es mejor pensar en STL como una extensión del lenguaje en lugar de una biblioteca tradicional. • Estructuras de datos más complicadas que no son parte de la biblioteca, como grafos y tablas hash, pueden ser construidas fácilmente sobre los componentes existentes de STL. Mtl. Lourdes Cahuich 9
  • 10. Descripción de STL • El uso de los componentes de la biblioteca permite a los diseñadores de una clase, enfocarse en el desarrollo conceptual del diseño y en la funcionalidad de la clase nueva, en lugar de pasar mucho tiempo programando y depurando las estructuras estándar Mtl. Lourdes Cahuich 10
  • 12. Contenedores estándar • Los contenedores estándar están disponibles a través de los siguientes archivos de encabezado (también conocidos como archivos de cabecera), cuyos nombres indican el tipo de contenedor correspondiente. Mtl. Lourdes Cahuich 12
  • 13. #include <string> // strings #include <vector> // arrays #include <list> // cyclic doubly linked lists #include <deque> // hybrid list/array #include <queue> // queue #include <stack> // stack #include <bitset> // bit-vectors #include <set> // general sets #include <map> // associative arrays Mtl. Lourdes Cahuich 13
  • 14. Contenedores estándar • En el siguiente listado se observa el soporte de cálculos numéricos. #include <complex> //complex numbers #include <valarray> //numerical arrays #include <numeric> //numerical algorithms #include <cmath> //math functions Mtl. Lourdes Cahuich 14
  • 16. Contenedores estándar - iteradores • Los iteradores ofrecen una interfaz uniforme entre los contenedores y los algoritmos en STL. • Los iteradores son modelados a partir de apuntadores sencillos de C++. Mtl. Lourdes Cahuich 16
  • 17. Contenedores estándar - iteradores • En particular, los operadores operator*, operator++ entre otros, son sobrecargados apropiadamente, por lo que el uso de iteradores es muy similar al uso de apuntadores. Mtl. Lourdes Cahuich 17
  • 18. Contenedores estándar - iteradores • Por ejemplo, en el siguiente listado se muestra el idioma estándar para recorrer un contenedor e imprimir sus elementos. Mtl. Lourdes Cahuich 18
  • 19. string A = quot;This is a stringquot;; string::iterator it; //create iterator for (it = A.begin(); it != A.end(); ++it) { cout << *it << endl; } Mtl. Lourdes Cahuich 19
  • 20. Contenedores estándar - iteradores • Aquí it es un iterador adecuado para el contenedor A. • Las funciones miembro A.begin() y A.end() regresan los iteradores, uno apuntando al primer elemento en A, y el otro apuntando a quot;uno-después-del- finalquot;, significando una posición hipotética que podría ser ocupada por el último elemento si se agregara al contenedor otro elemento Mtl. Lourdes Cahuich 20
  • 21. for (it = A.begin(); it != A.begin() + 10; ++it) { cout << *it << endl; } Mtl. Lourdes Cahuich 21
  • 23. Algoritmos de STL • El núcleo de STL es su extensa colección de algoritmos. • Debido a que los iteradores forman la interfaz entre los contenedores y los algoritmos en STL, los algoritmos son (en su mayor parte) implantados como funciones libres Mtl. Lourdes Cahuich 23
  • 24. Algoritmos de STL • Usar funciones libres en lugar de funciones miembro tiene el efecto deseado de reducir su número considerablemente. • En algunos casos especiales, uno puede ser forzado a usar funciones miembro, ya sea porque el iterador no puede proveer suficiente información, o por razones de eficiencia. (como veremos, la operación erase y la clase list de STL son ejemplos) Mtl. Lourdes Cahuich 24
  • 25. Algoritmos de STL • A través del curso, examinaremos muchos de los algoritmos de STL. • Para el contenedor string, vale la pena examinar las funciones replace y reverse. • La función replace sustituye todas las ocurrencias de un elemento con un valor particular, por otro valor Mtl. Lourdes Cahuich 25
  • 26. Cómo Usar el Contenedor vector de STL
  • 27. Un Vector Como una Clase de Arreglo • La clase vector brinda una alternativa segura y con muchas características para un arreglo. • Similar a un arreglo, un vector almacena secuencialmente series de objetos de tipos de datos idénticos. Mtl. Lourdes Cahuich 27
  • 28. Usando Vector como un arreglo • Debido a que es un contenedor de STL, la clase vector soporta programación genérica. • Podemos crear un vector que almacena enteros, cadenas de caracteres, o uno que almacena cualquier otro tipo primitivo o definido por el usuario Mtl. Lourdes Cahuich 28
  • 29. Usando Vector como un arreglo • Los arreglos pueden ser peligrosos de usar debido a que no brindan funcionalidad al programador. • Al usar arreglos, el programador es responsable de crear cualquier funcionalidad de alto nivel, como cambiar el tamaño o revertir el arreglo. Mtl. Lourdes Cahuich 29
  • 30. Usando Vector como un arreglo • Estas implantaciones pueden ser riesgosas y si no son codificadas correctamente, pueden introducir leves errores en una aplicación. • Los vectores son una alternativa más segura para los arreglos, debido a que proveen funciones miembro que implantan estas (y otras) tareas de alto nivel Mtl. Lourdes Cahuich 30
  • 31. #include <string> #include <cstdlib> #include <iostream> #include <vector> using namespace std; int main(int argc, char* argv[]) { vector<int> v1; vector<double> v2; vector<bool> v3; vector<string> v4; return EXIT_SUCCESS; } Mtl. Lourdes Cahuich 31
  • 32. Usando Vector como un arreglo • Observa que para poder usar objetos de tipo vector, tenemos que incluir la biblioteca que define la clase vector. • Es interesante notar que también podemos declarar un vector de objetos vector. Mtl. Lourdes Cahuich 32
  • 33. Usando Vector como un arreglo • Esto provee una implantación para una estructura de datos bidimensional como una matriz vector<vector<int> > matrix; Mtl. Lourdes Cahuich 33
  • 34. Usando Vector como un arreglo • Para evitar confusión con el operador >> , la mayoría de los compiladores dejan un espacio siguiendo el primer signo de mayor que (>). • Esto aplica para cualquier declaración anidada de plantillas (templates), no sólo para vectores de vectores. Mtl. Lourdes Cahuich 34
  • 35. Usando Vector como un arreglo • La clase vector contiene un conjunto de constructores que los programadores pueden usar para establecer el tamaño inicial del vector y los valores iniciales de los elementos. Mtl. Lourdes Cahuich 35
  • 36. #include <string> #include <cstdlib> #include <iostream> #include <vector> using namespace std; int main(int argc, char* argv[]) { vector<int> v1; // initially empty vector<int> v2(5); // 5 elements, initialized to 0 vector<int> v3(10, 1); // 10 elements, initialized to 1 vector<int> v4(v3); // v4 is a copy of v3 return EXIT_SUCCESS; } Mtl. Lourdes Cahuich 36
  • 37. Usando Vector como un arreglo • Podemos acceder a los elementos almacenados en un vector de diferentes maneras. • Primero, la clase vector sobrecarga el operator[]. • Esto nos permite acceder elementos usando una sintaxis similar a la de subíndices de un arreglo Mtl. Lourdes Cahuich 37
  • 38. Usando Vector como un arreglo • Al igual que el acceso por subíndices, el operator[] sobrecargado de la clase vector no brinda una revisión del acceso fuera de los límites. • Cuando se requiere la revisión de los límites, debemos usar el método at(). Mtl. Lourdes Cahuich 38
  • 39. Usando Vector como un arreglo • También existen métodos de acceso especial para el primer y último elemento de un arreglo vector<int> v(10); v[1] = 2; v.at(2) = 45; v.front() = v.back(); Mtl. Lourdes Cahuich 39
  • 40. Usando Vector como un arreglo • Además de proveer las funciones miembro estándar discutidas anteriormente, la clase vector también brinda algunas otras funciones que seguramente no esperaríamos que sean parte de una clase de arreglo Mtl. Lourdes Cahuich 40
  • 41. Usando Vector como un arreglo • Por ejemplo, el método push_back agrega un dato al final del vector. • Este método automáticamente aumenta el tamaño del vector para acomodar el nuevo elemento. • El método pop_back desempeña la tarea opuesta. Mtl. Lourdes Cahuich 41
  • 42. Usando Vector como un arreglo • Esta función miembro elimina el último elemento del vector, reduciendo su tamaño en uno. • La función empty despliega true si el vector contiene cero elementos, y false en caso contrario Mtl. Lourdes Cahuich 42
  • 43. // An initially empty vectorvector<int> v; // push elements in for (int i = 0; i < 5; i++) { v.push_back(i); cout << quot;Size: quot; << v.size() << endl; } // pop elements off for (int j = 0; j < 5; j++) { v.pop_back(); cout << quot;Size: quot; << v.size() << endl; } cout << endl << v.empty() << endl; Mtl. Lourdes Cahuich 43