Descargar la presentación
La descarga está en progreso. Por favor, espere
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
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.