Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Arreglos tamaño dinámico C++

Estas en el tema de Arreglos tamaño dinámico C++ en el foro de C/C++ en Foros del Web. Buenas noches, necesito realizar una especie de agenda de contactos en c++, lo haré con una estructura así Código: struct persona{ string nombre; string direccion; ...
  #1 (permalink)  
Antiguo 12/05/2015, 20:13
 
Fecha de Ingreso: mayo-2015
Mensajes: 2
Antigüedad: 9 años
Puntos: 0
Arreglos tamaño dinámico C++

Buenas noches, necesito realizar una especie de agenda de contactos en c++, lo haré con una estructura así
Código:
struct persona{
      string nombre;
      string direccion;
      string numerotel;
}
El problema que tengo es que el usuario debe poder ingresar tantos contactos como desee y no puedo preguntar la cantidad de contactos que va a ingresar, como puedo definir el arreglo de variables de tipo persona, si no se la cantidad de espacios que va a tener?
  #2 (permalink)  
Antiguo 12/05/2015, 21:14
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Arreglos tamaño dinámico C++

Tienes 3 o más opciones.

1º guardar en ficheros. Es la correcta de las 3 ya que al abrir el programa querrás que los contactos aun estén ahí no?

2º- malloc/calloc/free... para C new/delete... para C++ preguntas el tamaño y te reservara eso en el heap. La memoria no variará, lo que le digas será fijo pero al menos le puedes decir un tamaño. Buscar en google "memoria dinámica C o C++"

3º- listas simples estilo C. Con listas vas incluyendo contactos y la memoria se irá reservando sola. Es bastante efectiva, pero no como los ficheros.

En C++ hasta tienes una 4º opción que es usar STL List o otros contenedores que viene a ser la opción 3 pero mejor para C++.
  #3 (permalink)  
Antiguo 13/05/2015, 15:25
 
Fecha de Ingreso: mayo-2015
Mensajes: 2
Antigüedad: 9 años
Puntos: 0
Respuesta: Arreglos tamaño dinámico C++

¿Podrías darme un ejemplo de las opciones que me planteaste? Apenas empiezo a aprender programación y no entiendo muy bien lo que planteas, cabe aclarar que no necesito persistencia de archivos, es decir, cada vez que se abra el programa se debe crear una lista de contactos nueva, no necesito conservar los que se hayan creado con anterioridad.
  #4 (permalink)  
Antiguo 13/05/2015, 16:33
 
Fecha de Ingreso: octubre-2013
Mensajes: 44
Antigüedad: 10 años, 6 meses
Puntos: 5
Respuesta: Arreglos tamaño dinámico C++

En este tipo de casos, cuando se desconoce el tamaño que puede tener un array hasta que el programa no es ejecutado, es necesario utilizar el 2º punto que han comentado: memoria dinámica, además del conocimento del uso de punteros.

Para reservar memoria dinámicamente en C++ se crea un puntero de la variable que quieres utilizar. Este puntero, inicialmente no apunta nada hasta que no le especifiques a donde quieres apuntar. Con el operador new puedes reservar tanta memoria como especifiques.

Código C++:
Ver original
  1. #include <iostream>
  2.  
  3. int main() {
  4.  
  5.     struct persona{
  6.       std::string nombre;
  7.       std::string direccion;
  8.       std::string numerotel;
  9.     };
  10.     int size;
  11.  
  12.     persona *agenda = NULL;    // Agenda es un puntero de tipo 'persona' inicialmente a nulo
  13.  
  14.     std::cout << "Introduce tamaño: ";
  15.     std::cin >> size;
  16.  
  17.     agenda = new persona[size];  // Se reserva memoria, agenda ahora es un array de SIZE personas
  18.  
  19.     if (agenda != NULL) {   // OJO: por cada 'new', siempre un 'delete'
  20.         delete[] agenda;  // Liberar memoria reservada
  21.         agenda = NULL;  // Apuntar otra vez a nulo (buena práctica)
  22.     }    
  23. }
  #5 (permalink)  
Antiguo 13/05/2015, 17:50
 
Fecha de Ingreso: junio-2014
Mensajes: 144
Antigüedad: 9 años, 10 meses
Puntos: 1
Respuesta: Arreglos tamaño dinámico C++

Hola, a juzgar por tu pregunta eres un neófito del c++ jeje y cuando yo estaba en tu lugar me surgió la misma pregunta en mi universidad.

Te comento, y me dices si te sirve.

En programación, cuando tu quieres manejar arreglos de datos (de enteros por ejemplo) que quieras redimencionar, es decir si la capacidad era de 3 datos ponerla de 4 o 5 o más, debes saber que hay una implicación grande: hay que manejar la memoria dinámica, es decir manejar la dirección en memoria de donde guardaste el arreglo, porque si lo quieres hacer más grande y resulta que luego del arreglo esta guardado otra variable, no va a caber y le toma migrar a otra parte de la memoria.

Manejar direcciones de memoria no es fácil, pero hay muchos contenedores programados que hacen eso por ti. Pero ojo te recomiendo que luego cuando estés más avanzado estudies todo esto de punteros y memoria dinámica.

De los mejores para empezar en la stl (librería entandar) en c++ son los vectores. Te recomiendo que veas está pagina con video tutoriales de Pau Fernándes un gran profesor del c++.

http://v1.minidosis.org/C++/Vectores/

Te explica con ejemplos, de manera practica y sencilla. Y cualquier duda pues estamos aquí para eso.

Saludos

Etiquetas: arreglos, c++, numero, programacion, struct, tamaño
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 11:52.