El Lenguaje C (Templates) - PowerPoint PPT Presentation

About This Presentation
Title:

El Lenguaje C (Templates)

Description:

... para ordenar los objetos de la colecci n implementada en nuestro template usando la funci n sort de la STL http://www.cplusplus.com/reference/algorithm/sort ... – PowerPoint PPT presentation

Number of Views:53
Avg rating:3.0/5.0
Slides: 14
Provided by: Isidr74
Category:

less

Transcript and Presenter's Notes

Title: El Lenguaje C (Templates)


1
El Lenguaje C(Templates)
  • Técnicas Fundamentales de Simulación,
    Reconstrucción y Análisis de Datos en Física
    Experimental de Partículas

5
Isidro González Caballero (Universidad de
Oviedo) Valencia, 07-11/05/20102
2
Templates (plantillas)
  • El comportamiento no depende del tipo de alguno
    de sus
  • Atributos (clases)
  • Argumentos (funciones y métodos)
  • Se utilizan para
  • Algoritmos (ej. ordenación)
  • Colecciones (ej. listas, conjuntos, arrays)
  • Trucos diversos (meta-programación)
  • Existe una librería altamente optimizada que
    proporciona toda esta funcionalidad la STL
    (Standard Template Library)
  • Se aplican tanto a funciones (function templates)
    como a clases (class templates)

3
Function Templates
  • Funciones cuyo comportamiento no depende del tipo
    de alguno de sus argumentos
  • Pueden ser funciones generales
  • O alguno de los métodos de una clase
  • Sintáxis tipo es cualquier nombretemplate
    ltclass tipogt f(tipo a, int b,)template
    lttypename tipogt f(tipo a, int b, )
  • Muy útiles para algoritmos de ordenación
  • Min/Max, Qsort,
  • El tipo solo tiene que tener el operador lt
    definido
  • Puede haber más de un meta-tipotemplate ltclass
    t1, class t2gt f(t1 a, t2 b,)

4
  • //Funcion template
  • template ltclass Tipogt Tipo Min(Tipo n1, Tipo n2)
  • return (n1 lt n2) ? n1 n2
  • //Uso
  • int iminimo Minltintgt(10,20) //ó Min(10,20)
    iminimo 10
  • double rminimo Min(3.14, 1.22) //rminimo
    1.22
  • //Ejemplo con 2 meta-tipos
  • template ltclass T1, class T2gt T1 Min (T1 n1, T2
    n2)
  • return (n1 lt n2) ? n1 n2
  • //Uso
  • int j
  • long int largo
  • int minimo Minltint, long intgt (j,largo)
    //Tanto esta forma como la siguiente
  • int minimo Min (j,largo) //son
    equivalentes

5
Class templates
  • Cuando el comportamiento de la clase no depende
    del tipo de uno o más de sus atributos (data
    members)
  • Colecciones Vectores, listas, mapas
  • Objetos matemáticos Matrices, Vectores,
  • Sintáxis

template ltclass Tipogt class MiClase public
MiClase() MiClase() Tipo
foo() protected Tipo atributo template
ltclass Tipogt MiClaseltTipogtMiClase()
6
Templates Ejemplo
  • Todo en el mismo fichero (header, .hh)
  • Cada vez que se utilice se genera todo el código
    para el tipo correspondiente

template ltclass Tipo2gt class Array public Array(int size) virtual Array() delete elArray Tipo2 operator(int i) protected Tipo2 elArray
Declaración
template ltclass Tipo2gt ArrayltTipo2gtArray(int size) elArray new Tipo2size template ltclass Tipo2gt ArrayltTipo2gtArray(int size) delete elArray template ltclass Tipo2gt Tipo2 ArrayltTipo2gt operator(int i) return elArrayi
//Array de enteros de dimensión 4 Arrayltintgt
ia(4) //Array de complejos de dim
size ArrayltComplexgt ClA(size)
Implementación
7
Ejemplo y Ejercicios
  • Descargar template.zip
  • Inspeccionar Array.hh y main.cc
  • Ejercicios
  • Obligatorios
  • Implementar la función template Max
  • Probar con un array de números complejos
  • Qué pasa cuando hacemos una copia? Corregirlo
  • Opcionales
  • Implementar la redimensión automática del array
  • Calcular cual es el máximo del array de enteros
    usando una función template

8
STL (Standard Template Library)
  • Conjunto de herramientas basadas en templates
    para C que proporcionan
  • Colecciones (estructuras de datos)
  • Iteradores
  • Objetos función
  • Algoritmos
  • ...
  • Se encuentran en el namespace std

9
STL - Colecciones
  • Secuencias
  • Vectores unidimensionales (vector) ? Inserta al
    final
  • Listas doblemente enlazadas (list) ?
    Inserta/borra en cualquier punto
  • deque ? Inserta/borra al principio/final
  • Contenedores asociativos
  • Ordenados (set y multiset) ? Búsqueda rápida
  • Desordenados (map y multimap) ? Inserción más
    rápida
  • Cadenas de caracteres (string)

10
STL Iteradores
  • Los iteradores son herramientas para iterar sobre
    los elementos de las colecciones anteriores (o
    arrays normales)
  • Especifican una posición dentro de una colección
  • Con dos iteradores podemos definir un rango
    dentro de una colección sobre el que aplicar, por
    ejemplo, un determinado algoritmo.
  • Son típicamente
  • incrementados (siguiente posición)
  • o des-referenciados (acceder a lainformación)
  • Para referirnos al comienzo o al final dela
    colección usamos collection.begin() collectio
    n.end()
  • Existen distintos tipos de iteradores forward,
    bidireccionales, entrada, salida

11
STL Algoritmos y objetos función
  • Algoritmos
  • Operan sobre (rangos de) colecciones
  • Incluyen
  • Ordenación (sort, merge, min, max)
  • Búsqueda (find, count, equal)
  • Mutación (transform, replace, fill, rotate,
    shuffle)
  • Operaciones numéricas genéricas (accumulate,
    adjacent difference...)
  • Objetos función
  • Son objetos que tienen definida al menos un
    operador ()
  • Mucho algoritmos utilizan objetos función para
    ejecutar una determinada operación sobre un rango
    de objetos en una colección

12
STL Ejemplo de utilización
  • include ltiostreamgtinclude ltvectorgtinclude
    ltstringgt
  • using namespace stdint main()
    vectorltstringgt SS SS.push_back("The number is
    10") SS.push_back("The number is 20")
    SS.push_back("The final number is 30") cout
    ltlt "Loop by index" ltlt endl for (unsigned int
    ii0 ii lt SS.size() ii) cout ltlt SSii ltlt
    endl
  • cout ltlt endl ltlt "Constant Iterator" ltlt endl
    vectorltstringgtconst_iterator cii for
    (ciiSS.begin() cii!SS.end() cii) cout
    ltlt cii ltlt endl

13
Ejercicio avanzado
  • Usar la STL y llenar un vector con 1000 números
    aleatorios (usar random.org)
  • Calcular el valor máximo y el mínimo
  • Ordenar los números usando el algoritmo sort de
    la STL
  • Para nota Añadir un método para ordenar los
    objetos de la colección implementada en nuestro
    template usando la función sort de la STL
  • http//www.cplusplus.com/reference/algorithm/sort/
Write a Comment
User Comments (0)
About PowerShow.com