elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Asignar Mas Memoria A Un Arreglo Dinamico
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Asignar Mas Memoria A Un Arreglo Dinamico  (Leído 2,975 veces)
Omar_2013

Desconectado Desconectado

Mensajes: 26


Ver Perfil
Asignar Mas Memoria A Un Arreglo Dinamico
« en: 2 Septiembre 2013, 22:36 pm »

En el main tengo un arreglo de tamaño 1 pero necesito que este incremente su tamaño a medida que el usuario digite mas y mas datos...

Código:
#include <cstdlib>
#include <iostream>
#include <string>
#include <conio.h>

using namespace std;

struct Datos {
       string Nombre;
       int Edad;
};

struct Categorias {
       string Deporte;
       int Atletas;
       Datos Informacion;
};

void Ingresar_Deportista ( Categorias *Deportes, int Cant_Deportes );

int main(int argc, char *argv[])
{   
    int Num_Deportes=1; //Tamaño Variable - Cambia En Tiempo De Ejecucion
    Categorias *Deportes= new Categorias[Num_Deportes];

    Ingresar_Deportista( Deportes, Num_Deportes );
   
    system("PAUSE");
    return EXIT_SUCCESS;
}

Ese incremento de tamaño lo implemente en la funcion Ingresar_Deportista justo al final

Código:
void Ingresar_Deportista ( Categorias *Deportes, int Cant_Deportes ){
     
     int i=0, Aux=0;
     char Opcion='s';
     
     while(Opcion=='s'){
     cout<<"Deporte: ";
     cin>>Deportes[i].Deporte;
     cout<<"\nNombre: ";
     cin>>Deportes[i].Informacion.Nombre;
     cout<<"Edad: ";
     cin>>Deportes[i].Informacion.Edad;
     cout<<"\nIngresar Mas? Si(s) ";
     Opcion=getch();
     i+=1;
     system("cls");
     
//Si Supera El Tamaño Maximo (Darle Mas Memoria Al Arreglo Dinamico)

     if( i>=Cant_Deportes ){
         Categorias *Agrandar= new Categorias[Cant_Deportes+1];
         for(Aux=0; Aux<Cant_Deportes; Aux++)
         Agrandar[Aux]=Deportes[Aux];
         Deportes=Agrandar;}
     }
}

El codigo compila pero despues de ingresar el tercer deporte el ejecutable se totea, a que se debe esto?


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Asignar Mas Memoria A Un Arreglo Dinamico
« Respuesta #1 en: 2 Septiembre 2013, 22:59 pm »

Esto se hace con vectores.

Código
  1. #include <vector>
  2.  
  3. void Ingresar_Deportista ( vector< Categorias >& Deportes );
  4.  
  5. int main(int argc, char *argv[])
  6. {  
  7.    int Num_Deportes=1; //Tamaño Variable - Cambia En Tiempo De Ejecucion
  8.    vector< Categorias > Deportes;
  9.  
  10.    Ingresar_Deportista( Deportes );
  11.  
  12.    system("PAUSE");
  13.    return EXIT_SUCCESS;
  14. }
  15.  
  16. void Ingresar_Deportista ( vector< Categorias >& Deportes )
  17. {
  18.     int i=0, Aux=0;
  19.     char Opcion='s';
  20.  
  21.     while(Opcion=='s'){
  22.       Categorias categoria;
  23.  
  24.     cout<<"Deporte: ";
  25.     cin>>categoria.Deporte;
  26.     cout<<"\nNombre: ";
  27.     cin>>categoria.Informacion.Nombre;
  28.     cout<<"Edad: ";
  29.     cin>>categoria.Informacion.Edad;
  30.  
  31.     Deportes.push_back( categoria );
  32.  
  33.     cout<<"\nIngresar Mas? Si(s) ";
  34.     Opcion=getch();
  35.     i+=1;
  36.     system("cls");
  37.  
  38.     }
  39. }

c++ tiene muchas clases útiles, es bastante importante conocer al menos las más importantes y, los contenedores ( vector, set, map, etc. ) son básicas.

Entre otras cosas gestionar tu esa memoria implica varios problemas. Por ejemplo para el que te ocupaba lo que tenías que hacer era crear un array nuevo, copiar el contenido del vector viejo en el nuevo, hacer que el puntero del vector viejo apuntase al nuevo y, finalmente, eliminar el vector viejo... demasiado curro innecesario.


« Última modificación: 2 Septiembre 2013, 23:02 pm por eferion » En línea

Omar_2013

Desconectado Desconectado

Mensajes: 26


Ver Perfil
Re: Asignar Mas Memoria A Un Arreglo Dinamico
« Respuesta #2 en: 2 Septiembre 2013, 23:15 pm »

soy un novato ... por eso necesitaba saber como se hacia de la forma innecesaria ...por que la verdad no te entendi eso de las clases...
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Asignar Mas Memoria A Un Arreglo Dinamico
« Respuesta #3 en: 2 Septiembre 2013, 23:21 pm »

El código siguiente crea un objeto llamado "Deportes" que va a ser un contenedor de tipo "vector", dicho contenedor va a almacenar elementos de tipo "Categorias".

Código
  1. vector< Categorias > Deportes;

Los contenedores son objetos de c++, como la clase string que ya has usado. Tienen su propio conjunto de métodos y sirven para almacenar colecciones de elementos, en tu caso un array de Categorias.

"vector" es un contenedor que se caracteriza porque los elementos que contiene mantienen el orden en el que fueron insertados, es decir, no ordena los objetos que contiene ( eso lo hace otro contenedor llamado "set" ).

El método "push_back" del vector añade un elemento al vector colocándolo al final de la lista.

La forma de acceder a los elementos de "vector" es la misma que para un array clásico de c, es decir, usando los corchetes. Esto es posible porque "vector" sobrecarga el operador de índice ( esto ya lo aprenderás en el futuro ).

Mejor así?
En línea

Omar_2013

Desconectado Desconectado

Mensajes: 26


Ver Perfil
Re: Asignar Mas Memoria A Un Arreglo Dinamico
« Respuesta #4 en: 2 Septiembre 2013, 23:26 pm »

 :huh:  de todas maneras gracias.  :huh:
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Arreglo Dinamico con Objetos :S
Java
Xephiro 9 14,450 Último mensaje 6 Marzo 2009, 20:20 pm
por juancho77
Duda con arreglo bidimensional dinámico en IDE DevC++
Programación C/C++
finger10 3 8,015 Último mensaje 2 Septiembre 2011, 17:01 pm
por finger10
Problema Con Un Arreglo Dinamico De Estructuras [?]
Programación C/C++
Omar_2013 2 2,716 Último mensaje 2 Septiembre 2013, 19:21 pm
por Omar_2013
doble duda (arreglo dinamico y funciones entre clases)
Programación C/C++
rulovive 5 3,440 Último mensaje 5 Abril 2014, 22:11 pm
por rulovive
[javascript] Asignar un valor dinamico a un atributo
Desarrollo Web
erest0r 3 2,935 Último mensaje 16 Noviembre 2014, 02:17 am
por erest0r
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines