You are on page 1of 13

Tcnicas Fundamentales de

Simulacin, Reconstruccin y
Anlisis de Datos en Fsica
Experimental de Partculas

EL LENGUAJE C++
(Templates)

Isidro Gonzlez Caballero (Universidad de


Oviedo)

Templates (plantillas)
2

El comportamiento no depende del tipo de alguno de


sus:

Se utilizan para:

Atributos (clases)
Argumentos (funciones y mtodos)
Algoritmos (ej. ordenacin)
Colecciones (ej. listas, conjuntos, arrays)
Trucos diversos (meta-programacin)

Existe una librera altamente optimizada que


proporciona toda esta funcionalidad: la STL
(Standard Template Library)
Se aplican tanto a funciones (function templates)
como a clases (class templates)
Tc. Fund. de Simulacin, Reconstruccin y Anlisis de datos en F. Exp. de Partculas

Function Templates
3

Funciones cuyo comportamiento no depende del tipo de


alguno de sus argumentos

Pueden ser funciones generales


O alguno de los mtodos de una clase

Sintxis: tipo es cualquier nombre

template <class tipo> f(tipo a, int b,);


template <typename tipo> f(tipo a, int b, );

Muy tiles para algoritmos de ordenacin:

Min/Max, Qsort,
El tipo solo tiene que tener el operador < definido

Puede haber ms de un meta-tipo:

template <class t1, class t2> f(t1 a, t2 b,);


Tc. Fund. de Simulacin, Reconstruccin y Anlisis de datos en F. Exp. de Partculas

//Funcion template
template <class Tipo> Tipo Min(Tipo n1, Tipo n2) {
return (n1 < n2) ? n1 : n2;
}
//Uso
int iminimo = Min<int>(10,20); // Min(10,20) iminimo == 10
double rminimo = 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;

int minimo = Min<int, long int> (j,largo); //Tanto esta forma como la siguiente
int minimo = Min (j,largo);
//son equivalentes

Tc. Fund. de Simulacin, Reconstruccin y Anlisis de datos en F. Exp. de Partculas

Class templates
5

Cuando el comportamiento de la clase no depende del


tipo de uno o ms de sus atributos (data members)

Colecciones: Vectores, listas, mapas


Objetos matemticos: Matrices, Vectores,

Sintxis:
template <class Tipo> class MiClase {
public:
MiClase();
~MiClase();
Tipo foo();
protected:
Tipo* atributo;
};
template <class Tipo> MiClase<Tipo>::MiClase() {}
Tc. Fund. de Simulacin, Reconstruccin y Anlisis de datos en F. Exp. de Partculas

Templates: Ejemplo

Implementacin

Declaracin

template <class Tipo2> class Array {


public:
Array(int size);
virtual ~Array() {delete[] elArray;}
Tipo2& operator[](int i);
protected:
Tipo2* elArray;
};
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];
}

Todo en el mismo
fichero (header, .hh)
Cada vez que se utilice
se genera todo el
cdigo para el tipo
correspondiente

//Array de enteros de dimensin 4


Array<int> ia(4);
//Array de complejos de dim size
Array<Complex> ClA(size);

Tc. Fund. de Simulacin, Reconstruccin y Anlisis de datos en F. Exp. de Partculas

Ejemplo y Ejercicios:
7

Descargar template.zip
Inspeccionar Array.hh y main.cc
Ejercicios:

Obligatorios:
Implementar la funcin template Max
Probar con un array de nmeros complejos
Qu pasa cuando hacemos una copia? Corregirlo

Opcionales:
Implementar la redimensin automtica del array
Calcular cual es el mximo del array de enteros usando
una funcin template

Tc. Fund. de Simulacin, Reconstruccin y Anlisis de datos en F. Exp. de Partculas

STL
(Standard Template
Library)

Conjunto de
herramientas basadas en
templates para C++ que
proporcionan

Colecciones (estructuras
de datos)
Iteradores
Objetos funcin
Algoritmos
...

Se encuentran en el
namespace std
Tc. Fund. de Simulacin, Reconstruccin y Anlisis de datos en F. Exp. de Partculas

STL - Colecciones
9

Secuencias:

Contenedores asociativos

Vectores unidimensionales
(vector) Inserta al final
Listas doblemente enlazadas
(list) Inserta/borra en
cualquier punto
deque Inserta/borra al
principio/final
Ordenados (set y multiset)
Bsqueda rpida
Desordenados (map y
multimap) Insercin ms
rpida

Cadenas de caracteres
(string)

Tc. Fund. de Simulacin, Reconstruccin y Anlisis de datos en F. Exp. de Partculas

STL: Iteradores
10

Los iteradores son herramientas para iterar sobre los


elementos de las colecciones anteriores (o arrays
normales)
Especifican una posicin dentro de una coleccin

Son tpicamente:

Con dos iteradores podemos definir un rango dentro de


una coleccin sobre el que aplicar, por ejemplo, un
determinado algoritmo.
incrementados (siguiente posicin)
o des-referenciados (acceder a la
informacin)

Para referirnos al comienzo o al final de


la coleccin usamos:
collection.begin()
collection.end()

Existen distintos tipos de iteradores: forward,


bidireccionales, entrada, salida
Tc. Fund. de Simulacin, Reconstruccin y Anlisis de datos en F. Exp. de Partculas

STL: Algoritmos y objetos


funcin

11

Algoritmos

Operan sobre (rangos de) colecciones


Incluyen
Ordenacin (sort, merge, min, max)
Bsqueda (find, count, equal)
Mutacin (transform, replace, fill, rotate, shuffle)
Operaciones numricas genricas (accumulate, adjacent
difference...)

Objetos funcin:

Son objetos que tienen definida al menos un operador


()
Mucho algoritmos utilizan objetos funcin para
ejecutar una determinada operacin sobre un rango
de objetos en una coleccin
Tc. Fund. de Simulacin, Reconstruccin y Anlisis de datos en F. Exp. de Partculas

STL: Ejemplo de utilizacin


12

#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;

Tc. Fund. de Simulacin, Reconstruccin y Anlisis de datos en F. Exp. de Partculas

Ejercicio avanzado
13

Usar la STL y llenar un vector con 1000


nmeros aleatorios (usar random.org)
Calcular el valor mximo y el mnimo
Ordenar los nmeros usando el algoritmo sort
de la STL
Para nota: Aadir un mtodo para ordenar los
objetos de la coleccin implementada en
nuestro template usando la funcin sort de la
STL

http://www.cplusplus.com/reference/algorithm/sort
/
Tc. Fund. de Simulacin, Reconstruccin y Anlisis de datos en F. Exp. de Partculas