Autor
|
Tema: Vectores vs Listas (Leído 6,588 veces)
|
leosansan
Desconectado
Mensajes: 1.314
|
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!. .... ..
|
|
« Última modificación: 2 Junio 2013, 07:11 am por leosansan »
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
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. 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.
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
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:
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
Gracias 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: #include <list>
Como no tienes el operador []. Para recorrer una lista tienes que usar un iterador: 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; }
|
|
« Última modificación: 2 Junio 2013, 12:20 pm por amchacon »
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
¡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: #include <list>
Como no tienes el operador []. Para recorrer una lista tienes que usar un iterador: 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.  . Ahora me meteré de lleno con ese tema, me has quitado el miedo a otro rollo batatero. Saluditos y gracia nuevamente!. .... ..
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
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: 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: 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!
|
|
« Última modificación: 2 Junio 2013, 12:37 pm por amchacon »
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
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 !... ...
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
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.
|
|
« Última modificación: 2 Junio 2013, 14:26 pm por amchacon »
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
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!. .... ..
|
|
|
En línea
|
|
|
|
|
|