La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

9. Collecciones en C++ .NET

Presentaciones similares


Presentación del tema: "9. Collecciones en C++ .NET"— Transcripción de la presentación:

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

2 9.1 Arreglos

3 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 2 3 4 1 3 4 6 2

4 Arreglos 1 Dimensión Declaración <tipo>* nombre_variable;
Inicialización nombre_variable = new <tipo>[<tamaño>]; Ejemplo int* vector; vector = new int[3];

5 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>];

6 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];

7 9.1 Collecciones

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

9 Colecciones Las más utilizadas son: ArrayList HashTable Queue Stack
SortedList

10 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.

11 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();

12 ArrayList 1 2 3 4 1 3 4 6 2

13 ArrayList Adherir un nuevo elemento. Determinar si existe un 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> ];

14 ArrayList Remover un elemento. Limpiar la estructura.
void Remove(System::Object^ value); Limpiar la estructura. void Clear(); Obtener el número de elementos insertados. int Count;

15 ArrayList – Ejemplo PROBLEMA!
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.

16 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] );

17 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] );

18 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] ); }

19 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)); }

20 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 !!!

21 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; }

22 9.1 Collecciones Genéricas

23 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.

24 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^>();

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

26 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^>();

27 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.

28 Recorrer listas

29 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).

30 Eliminar elementos

31 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.

32 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.

33 Recorrer y eliminar elementos

34 Recorrer y eliminar elementos

35 Recorrer y eliminar elementos
Opción 2: Inicializando el iterador cada vez que se desee remover un elemento.

36 Colecciones

37 Preguntas ¿? 37


Descargar ppt "9. Collecciones en C++ .NET"

Presentaciones similares


Anuncios Google