agosto 13, jueves 2018 k1051 cl… · una familia de funciones lo mismo aplica a tipos la...
TRANSCRIPT
![Page 1: Agosto 13, Jueves 2018 K1051 Cl… · una familia de funciones Lo mismo aplica a tipos La metaprogramación es programar un constructo que le indique al compilador que programe en](https://reader030.vdocumento.com/reader030/viewer/2022041113/5f1f3cb4403c6f2a160f2f1f/html5/thumbnails/1.jpg)
Agosto13,Jueves
![Page 2: Agosto 13, Jueves 2018 K1051 Cl… · una familia de funciones Lo mismo aplica a tipos La metaprogramación es programar un constructo que le indique al compilador que programe en](https://reader030.vdocumento.com/reader030/viewer/2022041113/5f1f3cb4403c6f2a160f2f1f/html5/thumbnails/2.jpg)
Agendaparaestaclase� MetaprogramaciónyProgramaciónGenérica� ArreglosAsociativos� IntroducciónaÁrboles
Prof. Esp. Ing. José María Sola 269
![Page 3: Agosto 13, Jueves 2018 K1051 Cl… · una familia de funciones Lo mismo aplica a tipos La metaprogramación es programar un constructo que le indique al compilador que programe en](https://reader030.vdocumento.com/reader030/viewer/2022041113/5f1f3cb4403c6f2a160f2f1f/html5/thumbnails/3.jpg)
Prof. Esp. Ing. José María Sola 270
![Page 4: Agosto 13, Jueves 2018 K1051 Cl… · una familia de funciones Lo mismo aplica a tipos La metaprogramación es programar un constructo que le indique al compilador que programe en](https://reader030.vdocumento.com/reader030/viewer/2022041113/5f1f3cb4403c6f2a160f2f1f/html5/thumbnails/4.jpg)
� Laprogramacióngenérciapermiteimplementartiposyfuncionesparametrizados
� Alimplementarunafuncióngenérica,enrealidadestamosimplementandounafamiliadefunciones
� Lomismoaplicaatipos
� Lametaprogramaciónesprogramarunconstructoqueleindiquealcompiladorqueprogrameenlenguajefuentepornosotros
� Nuestroconstructoresultadonoesunprograma,sino,unprogramaparaquelecompiladorprograme
� ElconstructoenC++estemplate(molde)
� EnC++,laProgramaciónGenéricaselograconmetaprogramación
� EnJavanohaymetaprogramación,perosíprogramacióngenérica,conimpactoeneltiempodeejecuciónperoconcódigomásbreve
� C#yDsiguenunmodelomássimilaraC++
� Clolograconmétodosnosseguroscomovoid*.
ProgramaciónGenéricayTemplates
![Page 5: Agosto 13, Jueves 2018 K1051 Cl… · una familia de funciones Lo mismo aplica a tipos La metaprogramación es programar un constructo que le indique al compilador que programe en](https://reader030.vdocumento.com/reader030/viewer/2022041113/5f1f3cb4403c6f2a160f2f1f/html5/thumbnails/5.jpg)
void PrintArrayInt5(const array<int,5>& x){ for(auto e : x) cout << e << '\t'; cout << '\n';
} PrintArrayInt5(a);
template <size_t n> void PrintArrayInt(const array<int, n>& x){
for(auto e : x) cout << e << '\t'; cout << '\n';
} PrintArrayInt(a);
FamiliadeFuncionessobreTamaño,TipoyAmbosh=ps://josemariasola.wordpress.com/aed/papers#ArraysAndTemplates
template <typename T, size_t n> void PrintArray(const array<T, n>& x){
for(auto e : x) cout << e << '\t'; cout << '\n';
} PrintArray(a);
Prof. Esp. Ing. José María Sola 272
array<int, 5> a = {{1,2,3,4,5}};
![Page 6: Agosto 13, Jueves 2018 K1051 Cl… · una familia de funciones Lo mismo aplica a tipos La metaprogramación es programar un constructo que le indique al compilador que programe en](https://reader030.vdocumento.com/reader030/viewer/2022041113/5f1f3cb4403c6f2a160f2f1f/html5/thumbnails/6.jpg)
array<array<int,3>,5> aai35; Matrix<int,5,3> mi53; Matrix<> mi11; Matrix<double> md11; Matrix<char,2> mc22;
template <typename T = int, std::size_t rows = 1, std::size_t columns = rows> using Matrix = std::array< // array std::array< // of arrays T, // of T columns // of columns elements >, rows // of rows elements >;
FamiliadeTipoMatricesporTipo&TamañoyDefaults
Prof. Esp. Ing. José María Sola 273
template <typename T = int, std::size_t rows = 1, std::size_t columns = rows> using Matrix = std::array<std::array<T,columns>,rows>;
![Page 7: Agosto 13, Jueves 2018 K1051 Cl… · una familia de funciones Lo mismo aplica a tipos La metaprogramación es programar un constructo que le indique al compilador que programe en](https://reader030.vdocumento.com/reader030/viewer/2022041113/5f1f3cb4403c6f2a160f2f1f/html5/thumbnails/7.jpg)
a.k.a.:- LookupTable,- TabladeBúsqueda,- TabladeSímbolos,ó- Mapa
Prof. Esp. Ing. José María Sola 274
![Page 8: Agosto 13, Jueves 2018 K1051 Cl… · una familia de funciones Lo mismo aplica a tipos La metaprogramación es programar un constructo que le indique al compilador que programe en](https://reader030.vdocumento.com/reader030/viewer/2022041113/5f1f3cb4403c6f2a160f2f1f/html5/thumbnails/8.jpg)
� Problema� Almacenarparesdenombresyteléfonosy
buscarpornombre� TipodeDatoAbstracto:AgendaTelefónica
� Valores� Agenda={(nombre,teléfono)/nombre,teléfonoin
Sigma*,nombrenotempty,telefononotempty}� Agenda=NombrexxTeléfono,
Nombre=Teléfono=Sigma*� Operaciones
� Add(a,nombre,teléfono)� Get(a,nombre)� Set(a,nombre,telefono)� Remove(a,nombre)
� EjemploAgenda a; Add(a, "Superman","555-4567"); Add(a, "Batman","555-5555"); Add(a,"Wonder Woman","555-1234"); Add(a, "Lois","555-4567"); Add(a, "Bruce","555-5555"); Add(a, "Diana","555-1234"); Add(a, "Darkside","555-6666"); cout<<Get(a,"Lois");//555-4567
� Implementación� Representaciónen:
� Arreglo� Listaenlazada� Comparar
� Espacio� O(n)
� Tiemposdeoperaciones� O(n)� O(logn)
AgendaTelefónica
![Page 9: Agosto 13, Jueves 2018 K1051 Cl… · una familia de funciones Lo mismo aplica a tipos La metaprogramación es programar un constructo que le indique al compilador que programe en](https://reader030.vdocumento.com/reader030/viewer/2022041113/5f1f3cb4403c6f2a160f2f1f/html5/thumbnails/9.jpg)
Prof. Esp. Ing. José María Sola 276
![Page 10: Agosto 13, Jueves 2018 K1051 Cl… · una familia de funciones Lo mismo aplica a tipos La metaprogramación es programar un constructo que le indique al compilador que programe en](https://reader030.vdocumento.com/reader030/viewer/2022041113/5f1f3cb4403c6f2a160f2f1f/html5/thumbnails/10.jpg)
� MejorSoluciónÁrbol� Tiemposlogarítmicos
� UnÁrboltambiénpermiteimplementarConjuntoFinito� Add� IsMember� Remove
� ¿Podemosimplementarunconjuntoinfinito?¿Unasecuenciainfinita?
ÁrboldeBúsquedaBinario:BST
Prof. Esp. Ing. José María Sola 277
![Page 11: Agosto 13, Jueves 2018 K1051 Cl… · una familia de funciones Lo mismo aplica a tipos La metaprogramación es programar un constructo que le indique al compilador que programe en](https://reader030.vdocumento.com/reader030/viewer/2022041113/5f1f3cb4403c6f2a160f2f1f/html5/thumbnails/11.jpg)
![Page 12: Agosto 13, Jueves 2018 K1051 Cl… · una familia de funciones Lo mismo aplica a tipos La metaprogramación es programar un constructo que le indique al compilador que programe en](https://reader030.vdocumento.com/reader030/viewer/2022041113/5f1f3cb4403c6f2a160f2f1f/html5/thumbnails/12.jpg)