1 / 13

El Lenguaje C++ ( T emplates )

5. El Lenguaje C++ ( T emplates ). Isidro González Caballero ( Universidad de Oviedo) Valencia, 07-11/05/20102. Técnicas Fundamentales de Simulación, Reconstrucción y Análisis de Datos en Física Experimental de Partículas. Templates (plantillas).

ilar
Download Presentation

El Lenguaje C++ ( T emplates )

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 5 El Lenguaje C++(Templates) Isidro González Caballero (Universidad de Oviedo) Valencia, 07-11/05/20102 Técnicas Fundamentales de Simulación, Reconstrucción y Análisis de Datos en Física Experimental de Partículas

  2. Templates (plantillas) • El comportamiento no depende del tipode alguno de sus: • Atributos (clases) • Argumentos (funciones y métodos) • Se utilizanpara: • Algoritmos(ej. ordenación) • Colecciones(ej. listas, conjuntos, arrays) • Trucosdiversos (meta-programación) • Existeunalibreríaaltamenteoptimizadaqueproporcionatodaestafuncionalidad: la STL(Standard Template Library) • Se aplicantanto a funciones(function templates) como a clases(class templates) Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas

  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 <classtipo> f(tipo a, int b,…);template <typenametipo> f(tipo a, int b, …); • Muy útiles para algoritmos de ordenación: • Min/Max, Qsort,… • El “tipo” solo tiene que tener el operador < definido • Puede haber más de un meta-tipo:template <classt1, classt2> f(t1a, t2 b,…); Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas

  4. //Funciontemplate template <classTipo> TipoMin(Tipon1, Tipon2) { return (n1 < n2) ? n1 : n2; } //Uso intiminimo = Min<int>(10,20); //ó Min(10,20) iminimo == 10 doublerminimo = Min(3.14, 1.22); //rminimo == 1.22 //Ejemplo con 2 meta-tipos template <class T1, class T2> T1 Min (T1 n1, T2 n2) { return (n1 < n2) ? n1 : n2; } //Uso int j; long int largo; … intminimo = Min<int, long int> (j,largo); //Tantoesta forma como la siguiente intminimo = Min (j,largo); //son equivalentes Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas

  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 <classTipo> class MiClase { public: MiClase(…); ~MiClase(); Tipo foo(…); protected: Tipo* atributo; }; template <classTipo> MiClase<Tipo>::MiClase(…) {…} Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas

  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 Declaración //Array de enteros de dimensión 4 Array<int> ia(4); //Array de complejos de dim size Array<Complex> ClA(size); Implementación Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas

  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 Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas

  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 Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas

  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) • … Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas

  10. STL: Iteradores • Los iteradores son herramientas para iterar sobre los elementos de las coleccionesanteriores (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()collection.end() • Existen distintos tipos de iteradores: forward, bidireccionales, entrada, salida Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas

  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, adjacentdifference...) • Objetosfunción: • Son objetosquetienendefinida al menos un operador () • Mucho algoritmosutilizanobjetosfunciónparaejecutarunadeterminadaoperaciónsobre un rango de objetos en unacolección Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas

  12. STL: Ejemplo de utilización #include <iostream>#include <vector>#include <string> using namespace std;int main() {vector<string> SS; SS.push_back("The number is 10"); SS.push_back("The number is 20"); SS.push_back("The final number is 30"); cout << "Loop by index:" << endl;for (unsigned int ii=0; ii < SS.size(); ii++) cout << SS[ii] << endl; cout << endl << "Constant Iterator:" << endl;vector<string>::const_iterator cii;for (cii=SS.begin(); cii!=SS.end(); cii++) cout << *cii << endl;} Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas

  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/ Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas

More Related