Desarrollo de videojuegos 3: técnicas avanzadas (2ª edición)

Page 54

[36]

CAPÍTULO 2. C++ AVANZADO

Listado 2.17: Ejemplo de uso de mismatch() 1 void test_mismatch() { 2 int A1[] = { 3, 1, 4, 1, 5, 9, 3}; 3 int A2[] = { 3, 1, 4, 2, 8, 5, 7}; 4 const int size = sizeof(A1) / sizeof(int); 5 6 pair<int*, int*> result = mismatch(A1, A1 + size, A2); 7 assert(result.first == A1 + 3); 8 assert((*result.first) == 1 and (*result.second) == 2); 9 }

Muchos algoritmos de transformación que manejan dos secuencias requieren solo tres iteradores. El tercer iterador indica el comienzo de la secuencia de salida y se asume que ambas secuencias son del mismo tamaño.

equal() Indica si los rangos indicados son iguales. Por defecto utiliza el operator==(), pero opcionalmente es posible indicar un predicado binario como cuarto parámetro para determinar en qué consiste la «igualdad». Veamos un ejemplo en el que se comparan dos listas de figuras que se considerarán iguales simplemente porque coincida su color: Listado 2.18: Ejemplo de uso de equal() 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

enum Color{BLACK, WHITE, RED, GREEN, BLUE}; class Shape { public: Color color; Shape(void) : color(BLACK) {} bool cmp(Shape other) { return color == other.color; } }; void test_equal() { const int size = 5; Shape shapes1[size], shapes2[size]; shapes2[3].color = RED; assert(equal(shapes1, shapes1+size, shapes2, mem_fun_ref(&Shape::cmp)) == false); }


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.