Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Ivancamilo en 27 Septiembre 2016, 03:31 AM

Título: Como hacer un vector dinámico?
Publicado por: Ivancamilo en 27 Septiembre 2016, 03:31 AM
Hola!
Estoy manejando un programa en dev c++, donde tengo que crear una estructura de tipo vector que tiene un tamaño fijo de 3, y una función para capturar los datos que se van a almacenar en la estructura, la idea que cada vez que yo ingrese a la función de capturar los datos; el tamaño de la estructura vaya incrementando conforme aumentan los registros; pero no tengo idea de como podría hacer eso...
Ayuda este es el código que tengo.
Código (cpp) [Seleccionar]
#include <iostream>
#include <conio.h>
#include<windows.h>
//#define gt(x,y) {COORD a;a.X = x; a.Y = y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),a);}
#define gt(x,y) {HANDLE hcon;hcon = GetStdHandle(STD_OUTPUT_HANDLE); COORD dwPos;dwPos.X = x;dwPos.Y= y;SetConsoleCursorPosition(hcon,dwPos); }
#include <cstdlib>

#define max 3

using namespace std;

struct cedula{

    char ncedula[30],nom[30],ape[30],fn[15],fe[15];
    float estatura;     
}vec[max];

int capturo(int);
void formu();

int main(){
int h=0;
    char op;
    system("color 3f");
do{
system("cls");
cout<<"1- Capturar"<<endl;
cout<<"2- Consultar"<<endl;
cout<<"3- Modificar"<<endl;
cout<<"4- Eliminar"<<endl;
cout<<"5- Salir"<<endl;
cout<<"Que opcion desea ejecutar? :"<<endl;
        op=getche();

switch (op){
case '1':
h=capturo(h);
   
break;
case '2':
     
break;
case '3':

break;
case '4':
               
break;
}
}while(op!= '5');
    return 0;
    system("pause");   
}
void formu(){
gt(4,6);cout<<"digite el numero de la ceduala";
gt(4,7);cout<<"digite el nombre";
gt(4,8);cout<<"digite su apellidos";
gt(4,9);cout<<"digite su fecha de nacimiento ";
gt(4,10);cout<<"digite su fecha de expedicion ";
gt(4,11);cout<<"digite su estatura";
}

int capturo(int j){
char anadir='s';
int i=j;

for(;(i<max && anadir=='s' );i++){

system("cls");
    //cout<<"el valor de i es: "<<i<<endl;
    gt(4,3);cout<<"registro "<<++i<<" de "<<max<<endl;
   
formu();
    gt(44,6);gets(vec[i].ncedula);
   
gt(21,7);gets(vec[i].nom);
    gt(24,8);gets(vec[i].ape);
gt(34,9);gets(vec[i].fn);
    gt(34,10);gets(vec[i].fe);
    gt(23,11);cin>>vec[i].estatura;
fflush(stdin);
gt(4,16);cout<<"desea anadir mas registros S/N";
gt(36,16);anadir=getche();
getch();

--i;
}
return i;

}
Título: Re: Como hacer un vector dinámico?
Publicado por: JonaLamper en 28 Septiembre 2016, 00:32 AM
¿El tamaño tiene que ser 3 porque así te lo imponen? Cuando aumente de tamaño, ¿cuánto quieres que aumente? ¿No puedes usar la librería <vector> de C++ que internamente te aumenta el vector sin tú hacer nada?

Al margen de eso, la idea sería crear un vector de tamaño n (donde n es el tamaño antiguo + aumento) y copiar todos los elementos en el nuevo vector. La copia se realizaría con un for que dará m vueltas (donde m es la longitud del vector viejo). Para saber cuándo tienes que hacer el aumento, podrías llevar un contador que aumenta cada vez que insertas un nuevo elemento en el vector (contador++). Cuando contador = m - 1, entonces llamas a la función de aumentar tamaño.

Si lo que estas pensando es que el vector debe aumentar el tamaño de 1 en 1, es mejor que no lo hagas así, es muy ineficiente. Quizá una buena idea (si es que quieres hacerlo así) sería aumentar el vector al doble del tamaño antiguo.