Como hacer un vector dinámico?

Iniciado por Ivancamilo, 27 Septiembre 2016, 03:31 AM

0 Miembros y 1 Visitante están viendo este tema.

Ivancamilo

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;

}

JonaLamper

#1
¿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.
Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.