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

Post on 06-Jan-2015

16 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

Arreglos 1 Dimensión• Declaración

– <tipo>* nombre_variable;

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

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

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

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

9.1 Collecciones

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;

Colecciones

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

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.

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

ArrayList

1 3 4 6 2

0 1 2 3 4

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

ArrayList

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

• Limpiar la estructura.– void Clear();

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

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.

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

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

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

}

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

}

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

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;

}}

9.1 Collecciones Genéricas

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.

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

List

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

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

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

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.

Recorrer listas

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

Eliminar elementos

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.

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.

Recorrer y eliminar elementos

Recorrer y eliminar elementos

Recorrer y eliminar elementos

• Opción 2:

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

top related