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

Crear vector sin saber tamaño

Estas en el tema de Crear vector sin saber tamaño en el foro de C/C++ en Foros del Web. Pues eso... ¿Como se podria hacer un vector para almacenar datos que le van entrando uno a uno desde cin (no sabes cuantos van a ...
  #1 (permalink)  
Antiguo 28/06/2006, 15:17
 
Fecha de Ingreso: junio-2006
Mensajes: 2
Antigüedad: 18 años, 6 meses
Puntos: 0
Crear vector sin saber tamaño

Pues eso...
¿Como se podria hacer un vector para almacenar datos que le van entrando uno a uno desde cin (no sabes cuantos van a entrar ni puedes reservar un determinado tamaño de memoria para tu vector)?
Gracias y un saludo.
  #2 (permalink)  
Antiguo 28/06/2006, 16:12
Avatar de yournightmare86  
Fecha de Ingreso: abril-2006
Ubicación: Madrid
Mensajes: 875
Antigüedad: 18 años, 8 meses
Puntos: 9
Con la función malloc incluida en la biblioteca stdlib.h. Por ejemplo tendrías que poner:

#include<stdlib.h>
#include<stdio.h>

/*Declaras un puntero*/
int *q;
/*Declaras una variable tipo int llamada nelementos por ejemplo*/
int nelementos;
/*Pides que el ususario introduzca el numero de elementos del vector que variarará en cada ejecución del programa*/
printf("\n Introduzca el numero de elementos del vector: ");
scanf("%d",&nelementos);
/*Asignas memoria dinámica con la función de biblioteca malloc de la siguiente forma*/
q=(int*)malloc(nelementos*sizeof(int));
  #3 (permalink)  
Antiguo 28/06/2006, 17:13
 
Fecha de Ingreso: junio-2006
Mensajes: 2
Antigüedad: 18 años, 6 meses
Puntos: 0
¿No habria una forma más "sencilla" de hacerlo sin usar las funciones malloc o realloc?
Mi problema en concreto es que tengo una clase Polinomio cuya parte privada es :
1º un puntero (lamado coef) de float donde se guardan los coeficientes de un polinomio cuyo grado lo indica la posicion i dentro de ese mismo puntero o vector dinamico
2º un entero que nos indica el tamaño de dicho puntero o vector.

Entonces yo tengo que sobrecargar el operador de entrada de un polinomio desde un flujo, por el cual entraran grado y coeficiente, grado y coeficiente... asi un indeterminado numero de veces.
Y esa es mi duda, como ir almacenando en coef los coeficientes y en sus respectivas "casillas" dependiendo del grado.
Gracias de nuevo y un saludo.
  #4 (permalink)  
Antiguo 29/06/2006, 03:33
Avatar de yournightmare86  
Fecha de Ingreso: abril-2006
Ubicación: Madrid
Mensajes: 875
Antigüedad: 18 años, 8 meses
Puntos: 9
Pues no sabría decirte, para mí la forma más sencilla es usar malloc. Le paso el testigo a otros usuarios del foro que tienen más conocimientos de programación que yo a ver si ellos pueden echarte una mano. Sólo un último apunte. Si usas malloc no olvides liberar la memoria asignada con free. En el ejemplo que te puse, free(q); Un saludo.
  #5 (permalink)  
Antiguo 29/06/2006, 11:31
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años, 8 meses
Puntos: 2
Pues como ya menciono yournightmare86 la unicamanera que hay para manejar vectores dinamicos es usando memoria dinamica, ya sea que uses malloc en C y new en C++.

otra solucion sera utilizar listan enlazadas, ya sea que crees tu lista o uses la plantilla de STL.

si usaras new puedes ir escalando la creacion de memoria, para no redimencionar en cada entrada.

puedes empezar con 10,
llenas tus 10 indices y si hay un siguiente redimenciona a
20. y asi las siguientes entradas.


int INIT = 10;

int *vector = new int[INIT];


para llenarlo:

if(entrada < INIT)
{
vector[entrada] = valor;
}
else
{
vector = new(vector) int[(INIT+=10)];
}

esa es la idea.

Saludos.

para sobrecargar los operadores << y >> estos tienen que ser funciones amigas de tu clase.

ostream &operator<<(ostream &os, int valor);
istream &operator>>(istream &is, int valor);

Saludos
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 18:17.