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?
| |||
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:
si no, puedes usar gets() en lugar de cin.. int numElementos = 0; cout << "ingresa el numero de elementos de la lista" << endl; cin >> numElementos; int valores[numElementos]; |
| ||||
¿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 |
| ||||
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 |
| |||
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 |
| |||
Cita: 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.
Iniciado por Eternal Idol Eso es chachara, sino ver que hacen new y delete, llamar a malloc y free Última edición por blackwind; 13/06/2005 a las 19:43 |
| |||
Cita: Claro que estamos de acuerdo con que new y delete llaman a malloc/free.
Iniciado por Instru Estoy totalmente de acuerdo. Prefiero mil veces malloc y free( o en ciertoas casos calloc) que new y delete. 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. |
| |||
Cita: 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.
Iniciado por blackwind supongo que es muy probable que sea lo mismo, tal como lo dijiste tu eternal idol. 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... |
| ||||
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 |
| |||
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 |
| |||
Respuesta: listas en c++ o puedes ingresar simplemente todo lo que el usuario teclee usando esto:
Código C++:
Ver original |