Foros del Web » Programación para mayores de 30 ;) » Programación General »

listas en c++

Estas en el tema de listas en c++ en el foro de Programación General en Foros del Web. siempre que uso listas en c++ declaro un numero constante de elementos por ejemplo: int valores[10] pero como hago para que el usuario teclee un ...
  #1 (permalink)  
Antiguo 12/06/2005, 20:32
Avatar de dexter_x740  
Fecha de Ingreso: julio-2003
Ubicación: cd. obregon, Sonora
Mensajes: 246
Antigüedad: 20 años, 9 meses
Puntos: 1
listas en c++

siempre que uso listas en c++ declaro un numero constante de elementos por ejemplo:
int valores[10]

pero como hago para que el usuario teclee un numero y crear una lista con ese numero de elementos?
__________________
[D3X73®]
  #2 (permalink)  
Antiguo 12/06/2005, 22:52
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 5 meses
Puntos: 7
pues primero lees lo que el usuario ingrese y lo guardas en una variable para pasarselo al tamaño de la lista.

puedes hacerlo algo asi:

Código:
int numElementos = 0;
cout << "ingresa el numero de elementos de la lista" << endl;
cin >>  numElementos;
int valores[numElementos];
si no, puedes usar gets() en lugar de cin..
  #3 (permalink)  
Antiguo 13/06/2005, 00:38
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
¿blackwind probaste que ese codigo compilara?

Para reservar memoria dinamicamente se pueden usar new/delete y malloc/free, la primer pareja esta disponible solo en C++.

int *valores = new int[numElementos];
delete[] valores;

int *valores = (int*)malloc(numElementos * sizeof(int));
free(valores);
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #4 (permalink)  
Antiguo 13/06/2005, 08:14
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
jejeje, creo que ahora si te equivocaste blackwind.
Para poder poner el numero de elementos que el usuario quiere hay que usar memoria dinamica con punteros, en las faqs hay un tema que da una rapida explicacion de como hacerlo.

le pides el numero, y almacenas memoria dependiendo de ese numero.

Saludos
  #5 (permalink)  
Antiguo 13/06/2005, 12:39
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 5 meses
Puntos: 7
oops , perdon , ahora si me equivoque terriblemente, no se en que estaba pensando jejeje.
  #6 (permalink)  
Antiguo 13/06/2005, 13:18
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
No pasa naranja, consejito, siempre probar antes
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #7 (permalink)  
Antiguo 13/06/2005, 14:52
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Se recomienda el uso de new y delete porque es mejor manejado por el compilador (...) y tiene mayores comprobaciones, se puede sobrecargar, (...) Todo eso gracias a que adquiere las ventajas de ser un operador, no una función de ANSI C.

También se dice que no es bueno usar malloc y free en C++, y menos aún combinándolos con new y delete.

Última edición por MaxExtreme; 13/06/2005 a las 15:03
  #8 (permalink)  
Antiguo 13/06/2005, 15:26
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Eso es chachara, sino ver que hacen new y delete, llamar a malloc y free
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #9 (permalink)  
Antiguo 13/06/2005, 18:03
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Cita:
Eso es chachara, sino ver que hacen new y delete, llamar a malloc y free
Estoy totalmente de acuerdo.
Prefiero mil veces malloc y free( o en ciertoas casos calloc) que new y delete.
  #10 (permalink)  
Antiguo 13/06/2005, 19:38
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 5 meses
Puntos: 7
Cita:
Iniciado por Eternal Idol
Eso es chachara, sino ver que hacen new y delete, llamar a malloc y free
por ahi lei que es es mucho mas recomendable usar new y delete que malloc y free, como dijo MaxExtreme, pero por cuestiones de rendimiento, aunque en ningun momento dicen porque, y la verdad es que no he encontrado algo (tampoco busque mucho) que dijera porque, por lo cual, supongo que es muy probable que sea lo mismo, tal como lo dijiste tu eternal idol.

Última edición por blackwind; 13/06/2005 a las 19:43
  #11 (permalink)  
Antiguo 13/06/2005, 22:49
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por Instru
Estoy totalmente de acuerdo.
Prefiero mil veces malloc y free( o en ciertoas casos calloc) que new y delete.
Claro que estamos de acuerdo con que new y delete llaman a malloc/free.

Pero vas por mal camino si los usas ;) Más que nada, no tiene sentido usar una función pudiendo usar un operador, con las ventajas que ello aporta.
  #12 (permalink)  
Antiguo 13/06/2005, 22:52
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por blackwind
supongo que es muy probable que sea lo mismo, tal como lo dijiste tu eternal idol.
Llamar llaman a malloc/free, pero por ejemplo si tu sobrecargas new y delete para hacerte un recolector de basura sencillo y ver si tu programa está tirando aceite por algún lado, pues si has usado malloc y free no vas a poder, al menos que hagas una función que llame a malloc, etc.

Y aparte, las clases tienen que reservarse con new y delete. Hacerlo con malloc y free es penoso, y no sé si llaman al inicializador de la clase...
  #13 (permalink)  
Antiguo 14/06/2005, 00:28
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Por supuesto que no, la UNICA cosa que es fundamental en new y delete es que se llama al constructor y destructor (esto lo hace el compilador automaticamente).

Y como ya les comentaba si quieren ver, vean, depuren cualquier programa hecho en VC++ y veamos que hace new y delete, en realidad para algunas cosas como por ejemplo ESTE caso en concreto (reservar memoria dinamica para algunos int's) new y delete son una perdida de rendimiento que no tiene ningun sentido.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #14 (permalink)  
Antiguo 28/10/2008, 18:39
(Desactivado)
 
Fecha de Ingreso: enero-2008
Mensajes: 15
Antigüedad: 16 años, 4 meses
Puntos: 0
Información Respuesta: listas en c++

1. Las listas son estructuras autoreferidas, que crecen dinamicamente, usted hace referencia a vectores NO LISTAS.

2. Si deceas instanciar un numero determinado de objetos o primitivas(int, double...) debes de usar un vector o matriz, usando un puntero asi:

int* ptrInt;
//Constructor de la clase persona
Persona::Persona(int pint)
{
ptrInt = new int[pint];
iniciarVector(pint);
}

void Persona::iniciarVector(pint){
for(int i = 0; i < pint; i++) {
ptrInt[i] = new int; //Crea la instancia
}
}

NOTA: use la corriente de la Programacion Orientada a Objetos
  #15 (permalink)  
Antiguo 21/09/2010, 13:53
 
Fecha de Ingreso: septiembre-2010
Mensajes: 8
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: listas en c++

o puedes ingresar simplemente todo lo que el usuario teclee usando esto:

Código C++:
Ver original
  1. #include <iostream>
  2. #include <string>
  3. #include <list>
  4. using namespace std;
  5.  
  6. list<char> mi_lista;//defino la lista que contendra las letras
  7. void func_lista(string palabra);//prototipo de funcion
  8.  
  9. //programa principal
  10. int main()
  11. {
  12.     cout<<"introduzca la palabra: ";
  13.     string letras;
  14.     cin>>letras;
  15.     //llamo a las funciones
  16.     func_lista(letras);
  17.    
  18. return 0;
  19. }    
  20.  
  21. /******************declaro funcion******************/
  22. //lleno el vector con las letras de la palabra
  23. void func_lista(string palabra)
  24. {    
  25.     for(int i = 0; i != '\n'; i++)
  26.     {
  27.         mi_lista.push_back(palabra[i]);
  28.     }        
  29. }
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:35.