Vectores vs Listas

Iniciado por amchacon, 1 Junio 2013, 13:39 PM

0 Miembros y 2 Visitantes están viendo este tema.

leosansan

#10
Cita de: amchacon en  1 Junio 2013, 20:40 PM
Eso es lo que te pregunto (en este caso que escogerías?)

Yo me decanto por vector, de la librería vector que contiene con sus funciones incorporadas casi todo lo que exiges: añadir, añadir en una cierta posición,quitar, ordenar, desordenar , cambiar tamaño y así hasta 31 funciones ya listas ara ser usadas a la carta. También me influye el que veo las listas demasiado enrevesadas para programarlas desde que queremos añadirle las funcionalidades que de forma natural proporciona la clase vector. Es mi humilde opinión.

Saluditos!. .... ..

amchacon

Cita de: leosansan en  2 Junio 2013, 07:06 AMTambién me influye el que veo las listas demasiado enrevesadas para programarlas desde que queremos añadirle las funcionalidades que de forma natural proporciona la clase vector.
C++ incluye también una clase lista que ofrece las mismas funciones que la clase vector

Bueno miento, el operador [] no está pero tampoco hace falta porque recorro el contenedor entero, no necesito acceder a posiciones aleatorias.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

leosansan

Cita de: amchacon en  2 Junio 2013, 10:15 AM
C++ incluye también una clase lista que ofrece las mismas funciones que la clase vector

Bueno miento, el operador [] no está pero tampoco hace falta porque recorro el contenedor entero, no necesito acceder a posiciones aleatorias.

Gracias por la información, en C++ ando escasito de conocimiento  aún, pero todo se andará.

Y como habrás notado, los códigos que realmente me atraen son especialmente los numéricos, supongo que por deformación profesional. De ahí que esté estirando el tema de la matriz de 10x10 como un chicle, le estoy sacando el jugo en forma de game a algo que inicialmente era pura cálculo. Digo esto último por la ingeniosa forma que se me ocurrió para generar los aleatorios entre uno y mil sin que se repitieran.

Saluditos!. ....Y como buen Leo me despido a lo grande:



amchacon

#13
Cita de: leosansan en  2 Junio 2013, 11:27 AMGracias por la información, en C++ ando escasito de conocimiento  aún, pero todo se andará.
¡De nada! Te dejo la referencia:
http://www.cplusplus.com/reference/list/list/

Pero el uso es idéntico a los vectores, solo hay que sustituir vector -> list y hacer el include:

Código (cpp) [Seleccionar]
#include <list>

Como no tienes el operador []. Para recorrer una lista tienes que usar un iterador:

Código (cpp) [Seleccionar]
list<int> MiLista;

// Relleno la lista

for (int i = 0; i < 100;i++)
  MiLista.push_back(i);

// La muestro por pantalla

for (list<int>::iterator it = MiLista.begin(); it != MiLista.end();it++)
{
  cout<<*it<<endl;
}
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

leosansan

Cita de: amchacon en  2 Junio 2013, 12:02 PM
¡De nada! Te dejo la referencia:
http://www.cplusplus.com/reference/list/list/

Pero el uso es idéntico a los vectores, solo hay que sustituir vector -> list y hacer el include:

Código (cpp) [Seleccionar]
#include <list>

Como no tienes el operador []. Para recorrer una lista tienes que usar un iterador:

Código (cpp) [Seleccionar]
list<int>MiLista;

// Relleno la lista

for (int i = 0; i < 100;i++)
  MiLista.push_back(i);

// La muestro por pantalla

for (list<int>::iterator it = MiLista.begin(); it != MiLista.end();it++)
{
  cout<<*it<<endl;
}


Thanks, muchas thanks, creía que iba ser un tromento como las listas de C, todas llenas de punetros que al final no sabes ni adonde apunta los punteros y las flechas.  :laugh: :laugh: :laugh:. Ahora me meteré de lleno con ese tema, me has quitado el miedo a otro rollo batatero.

Saluditos y gracia nuevamente!. .... ..

amchacon

#15
Bueno ya que estoy, te digo más cosas de las listas.

Las listas no siguen un orden lineal, asi que pueden manipularse sus posiciones sin problemas. Por ello tenemos algunos elementos nuevos:

- Sort: Ordena los elementos de una lista de menor a mayor:

Código (cpp) [Seleccionar]
list<int>MiLista;

// Relleno la lista

for (int i = 0; i < 100;i++)
  MiLista.push_back(rand());

// Ordeno la lista

MiLista.sort();

// La muestro por pantalla

for (list<int>::iterator it = MiLista.begin(); it != MiLista.end();it++)
{
  cout<<*it<<endl;
}


- remove: Borra todos los elementos con un valor específico:

Código (cpp) [Seleccionar]
list<int>MiLista;

// Relleno la lista

for (int i = 0; i < 100;i++)
  MiLista.push_back(rand());

// ¡Elimino los ceros!

MiLista.remove(0);

// La muestro por pantalla

for (list<int>::iterator it = MiLista.begin(); it != MiLista.end();it++)
{
  cout<<*it<<endl;
}


- unique: Elimina los elementos repetidos.


Te dejo los vídeos con los que aprendí a usar listas:
http://minidosis.org/C++/Listas/

¡Saludillos!

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

leosansan

Cita de: amchacon en  2 Junio 2013, 12:30 PM
Bueno ya que estoy, te digo más cosas de las listas.
.....................................

Gracias nuevamente, dedicaré unos días a empollarme el tema, parece interesante. Aunque visto a bote pronto es casi como la clase vector, de entrada parecen muy semejantes. Pero, en fin,supongo que según profundice en el tema veré mejor las diferencias y bondades de cada método.

Saluditos campeón !... ...

amchacon

#17
Cita de: leosansan en  2 Junio 2013, 13:58 PM
Gracias nuevamente, dedicaré unos días a empollarme el tema, parece interesante. Aunque visto a bote pronto es casi como la clase vector, de entrada parecen muy semejantes. Pero, en fin,supongo que según profundice en el tema veré mejor las diferencias y bondades de cada método.
Sí, son muy parecidas. La mayor diferencia es el rendimiento de las operaciones:

Insertar un elemento al final

- Listas: Rápido, solo tiene que reservar un nuevo espacio en la memoria y enlazarlo con la última lista.
- Vector: Velocidad moderada, tiene que intentar hacer un realloc, si hay más espacio contiguo en la memoria no hay problema pero si no lo hay tendrá que mover todos los elementos a una nueva posición.

Acceso a una posición aleatoria

- Listas: Lento, tiene que ir recorriendo toda la lista hasta llegar al elemento en cuestión.
- Vector: Muy rápido.

Borrar un elemento aleatorio

- Listas: Rápido, simplemente elimina el elemento y ajusta los punteros.
- Vector: Lento, tiene que reorganizar los datos para que sigan estando contiguos en la memoria.

Inserción aleatoria

- Listas: Rápido, añade el nuevo elemento y ajusta los punteros.
- Vector: Lento, tiene que desplazar todos los elementos para dejar espacio al nuevo elemento.


Básicamente, los vectores ganan en acceso aleatorio y las listas ganan en inserción/borrado aleatorio.

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

leosansan

Cita de: amchacon en  2 Junio 2013, 14:16 PM
Sí, son muy parecidas. La mayor diferencia es el rendimiento de las operaciones:
................................................
Básicamente, los vectores ganan en acceso aleatorio y las listas ganan en inserción/borrado aleatorio.

Por lo que veo verifican las mismas características que existen en C entre los arrays y las listas, lo cual me confirma en la idea de que la clase lista en C++ es una implementación de todas aquellas funciones/operaciones que en C hay que hacer "a mano" a través de punteros. Sin duda una comodidad a favor de C++ sobre todo porque yo aún me lío con el uso de los puteros en las listas.

Gracias otra vez por  la información tan clara y puntual que me ofreces.

Saluditos!. .... ..