programación gráfica 9. collecciones en c++.net. 9.1 arreglos

37
Programación Gráfica 9. Collecciones en C+ + .NET

Upload: neva-collado

Post on 06-Jan-2015

14 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

Programación Gráfica

9. Collecciones en C++ .NET

Page 2: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

9.1 Arreglos

Page 3: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

Arreglos

• Colección ordenada de elementos de un mismo tipo. Ordenada significa que cada elemento tiene una ubicación determinada dentro del arreglo y debemos conocerla para accederlo.

1 3 4 6 2

0 1 2 3 4

Page 4: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

Arreglos 1 Dimensión• Declaración

– <tipo>* nombre_variable;

• Inicialización– nombre_variable = new <tipo>[<tamaño>];

• Ejemplo– int* vector;– vector = new int[3];

Page 5: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

Arreglos 2 Dimensiones• Declaración

– <tipo>** nombre_variable;

• Inicialización– *nombre_variable = new <tipo>[<tamaño_dim1>];

– for(int i= 0; i< <tamaño_dim1>; i++)• nombre_variable[i] = new <tipo>[<tamaño_dim2>];

Page 6: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

Arreglos 2 Dimensiones• Declaración

– char** tablero;

• Inicialización– *tablero = new char[3];

– for(int i= 0; i<3; i++)• tablero[i] = new char[3];

Page 7: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

9.1 Collecciones

Page 8: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

Colecciones• Las colecciones son estructuras de datos que

nos permiten almacenar y administrar diversos tipos de datos y objetos.

• Para esto usamos el namespace System::Collections;

Page 9: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

Colecciones

• Las más utilizadas son:– ArrayList– HashTable– Queue– Stack– SortedList

Page 10: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

Funcionalidades• Adherir un nuevo elemento.

• Determinar si existe un elemento.

• Acceder a un elemento.

• Remover un elemento.

• Limpiar la estructura.

• Obtener el número de elementos insertados.

Page 11: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

ArrayList

• Representa una lista de datos, la cual es dinámica; es decir, puede aumentar o disminuir en su tamaño.

• Declaración:– ArrayList^ list;

• Inicialización:– list = gcnew ArrayList();

Page 12: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

ArrayList

1 3 4 6 2

0 1 2 3 4

Page 13: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

ArrayList

• Adherir un nuevo elemento.– int Add(System::Object^ value);– void Insert(int index, System::Object^ value);

• Determinar si existe un elemento.– bool Contains(System::Object^ value);

• Acceder a un elemento.– <nombre_array>[ <index> ];

Page 14: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

ArrayList

• Remover un elemento.– void Remove(System::Object^ value);

• Limpiar la estructura.– void Clear();

• Obtener el número de elementos insertados.– int Count;

Page 15: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

ArrayList – Ejemplo

• Ej: Insertamos datos te tipo double y queremos acceder a ellos.

list->Add(4.5);

list->Add(5.4);

list->Add(3.2);

double dato = list[0];

• PROBLEMA!– En collections, todos los datos que manejan las estructuras de datos son

de tipo Object^. Se debe hacer alguna conversión.

Page 16: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

Casting Estático

• Para realizar un casting entre tipos de datos básicos, utilizamos static_cast.

• Se utiliza de la siguiente manera:– static_cast < tipo_dato > ( dato_a_convertir );

• double dato = static_cast< double >( list[0] );

Page 17: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

Casting Dinámico

• Para realizar un casting entre objetos, utilizamos dynamic_cast.

• Se utiliza de la siguiente manera:– dynamic_cast < tipo_objeto > ( objeto_a_convertir );

• Sprite^ sp = dynamic_cast< Sprite^ >( list[0] );

Page 18: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

Recorrer elementos

• Para recorrer elementos de una estructura podemos utilizar for.

for(int i=0; i < list->Count; i++)

{

suma += static_cast < double >( list[i] );

}

Page 19: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

Recorrer elementos

• Usando un enumerador, el cual no es más que una clase especializada que recorre todos los elementos, optimizando recursos.

IEnumerator^ e = list->GetEnumerator();

while(e->MoveNext())

{

suma += static_cast < double >(e->Current));

}

Page 20: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

Remover elementos• Se desea remover un elemento, al recorrer una estructura.

while(e->MoveNext()){

double dato = static_cast < double >(e->Current));

if(dato < 4.0)list->Remove(e->Current);

}

PROBLEMA !!!

Page 21: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

Remover elementos

• Solución– Terminar el for una vez que se cumple una condición.

while(e->MoveNext()){

double dato = static_cast < double >(e->Current));

if(dato < 4.0){

list->Remove(e->Current);break;

}}

Page 22: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

9.1 Collecciones Genéricas

Page 23: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

Colecciones Genéricas• Son colecciones con la misma funcionalidad que las

colecciones no genéricas, con la diferencia que éstas están orientadas a trabajar con datos específicos.

• Pertenecen al namespace System::Collections::Generics;

• La clase ArrayList idéntica en gererics es List.

Page 24: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

List• List<int>^ listaNumeros = gcnew List<int>();• List<Sprite^> enemigos = gcnew List<Sprite^>();

• Para los siguientes ejemplos utilizaremos una lista de balas y una de globos:

• List<Bala^>^ listaBalas = gcnew List<Bala^>();

• List<Globo^>^ listaGlobos = gcnew List<Globo^>();

Page 25: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

List

• List<int>^ listaNumeros = gcnew List<int>();

• List<Sprite^> enemigos = gcnew List<Sprite^>();

Page 26: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

List• Para los siguientes ejemplos utilizaremos

una lista de balas y otra de globos:

• List<Globo^> listaGlobos = gcnew List<Globo^>();

• List<Bala^> listaBalas = gcnew List<Bala^>();

Page 27: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

Recorrer listas• Para recorrer una lista utilizamos

nuevamente la clase IEnumerator.

• En el ejemplo se muestra cómo se mueven todas los globos de una lista a la vez.

Page 28: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

Recorrer listas

Page 29: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

Eliminar elementos• Para eliminar elementos, podemos iterar

nuevamente y hacer un break una vez se cumpla una condición.

• En el siguiente ejemplo se muestra cómo se elimina del SceneManager y de la lista de globos una vez éste haya atravesado la pantalla (de arriba abajo).

Page 30: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

Eliminar elementos

Page 31: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

Recorrer y eliminar elementos

• La idea no es recorrer la lista primero para mover globos y luego para eliminar los globos si atravesaron la pantalla, ya que estamos recorriendo 2 veces la lista.

• Veamos cómo podemos recorrer la lista y eliminar al mismo momento.

Page 32: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

Recorrer y eliminar elementos

• Opción 1:• Utilizando una lista temporal.

• Ejemplo: tenemos una lista de balas y una de globos y queremos ver si una bala a impactado un globo. Para esto el globo lo eliminamos normalmente, pero la bala la adherimos a una lista de balas.

Page 33: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

Recorrer y eliminar elementos

Page 34: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

Recorrer y eliminar elementos

Page 35: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos

Recorrer y eliminar elementos

• Opción 2:

• Inicializando el iterador cada vez que se desee remover un elemento.

Page 37: Programación Gráfica 9. Collecciones en C++.NET. 9.1 Arreglos