130 likes | 341 Views
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).
E N D
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
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
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
//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
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
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
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
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
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
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
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
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
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