el lenguaje c++ ( t emplates )

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

Upload: ilar

Post on 06-Jan-2016

29 views

Category:

Documents


0 download

DESCRIPTION

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). - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: El Lenguaje C++ ( T emplates )

EL LENGUAJE C++(Templates)

Técnicas Fundamentales de

Simulación, Reconstrucción y

Análisis de Datos en Física

Experimental de Partículas

Isidro González Caballero (Universidad de Oviedo)

Valencia, 07-11/05/20102

55

Page 2: El Lenguaje C++ ( T emplates )

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)

Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas

2

Page 3: El Lenguaje C++ ( T emplates )

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 <class tipo> f(tipo a, int b,…);template <typename tipo> 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 <class t1, class t2> f(t1 a, t2 b,…);

Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas

3

Page 4: El Lenguaje C++ ( T emplates )

//Funcion templatetemplate <class Tipo> Tipo Min(Tipo n1, Tipo n2) { return (n1 < n2) ? n1 : n2;}//Usoint iminimo = Min<int>(10,20); //ó Min(10,20) iminimo == 10double rminimo = Min(3.14, 1.22); //rminimo == 1.22

//Ejemplo con 2 meta-tipostemplate <class T1, class T2> T1 Min (T1 n1, T2 n2) { return (n1 < n2) ? n1 : n2;}//Usoint j;long int largo;…int minimo = Min<int, long int> (j,largo); //Tanto esta forma como la siguienteint minimo = Min (j,largo); //son equivalentes

Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas

4

Page 5: El Lenguaje C++ ( T emplates )

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 <class Tipo> class MiClase {public: MiClase(…); ~MiClase(); Tipo foo(…);protected: Tipo* atributo;};

template <class Tipo> MiClase<Tipo>::MiClase(…) {…}

Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas

5

Page 6: El Lenguaje C++ ( T emplates )

Templates: Ejemplo

template <class Tipo2> Array<Tipo2>::Array(int size) { elArray = new Tipo2[size];}template <class Tipo2> Array<Tipo2>::~Array(int size) { delete[] elArray;}template <class Tipo2> Tipo2& Array<Tipo2>:: operator[](int i) { return elArray[i];}

Dec

lara

ción

Imp

lem

enta

ción

template <class Tipo2> class Array {public: Array(int size); virtual ~Array() {delete[] elArray;} Tipo2& operator[](int i);protected: Tipo2* elArray;};

Todo en el mismo fichero (header, .hh)

Cada vez que se utilice se genera todo el código para el tipo correspondiente

//Array de enteros de dimensión 4Array<int> ia(4);

//Array de complejos de dim sizeArray<Complex> ClA(size);

Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas

6

Page 7: El Lenguaje C++ ( T emplates )

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

7

Page 8: El Lenguaje C++ ( T emplates )

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

8

Page 9: El Lenguaje C++ ( T emplates )

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

9

Page 10: El Lenguaje C++ ( T emplates )

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 la

información) Para referirnos al comienzo o al final de

la 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

10

Page 11: El Lenguaje C++ ( T emplates )

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

Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas

11

Page 12: El Lenguaje C++ ( T emplates )

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

12

Page 13: El Lenguaje C++ ( T emplates )

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/s

ort/Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas

13