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

Declarar matriz sin tamaño

Estas en el tema de Declarar matriz sin tamaño en el foro de C/C++ en Foros del Web. HOla como estan, tengo una nueva consulta de c++. Necesito declarar una matriz sin saber con antelacion su tamaño, es decir yo recibo el tamaño ...
  #1 (permalink)  
Antiguo 19/04/2008, 16:07
 
Fecha de Ingreso: abril-2008
Mensajes: 19
Antigüedad: 16 años, 1 mes
Puntos: 0
Declarar matriz sin tamaño

HOla como estan, tengo una nueva consulta de c++.
Necesito declarar una matriz sin saber con antelacion su tamaño, es decir yo recibo el tamaño desde un archivo.
La primera idea fue declararla en una funcion miembro pero no se si puedo hacerlo dese una funcion porque supongo que si lo hago en una funcion miembro de la clase sería local a la funcion y al terminar la matriz se destruye.
Entonces, yo quiero declarla como un dato privado de la clase, como lo hago si no tengo el tamaño previamente??? existe o conocen alguna otra manera ???
La idea de la matriz dinamica ya la contemple lo que sucede es que tambien tenderia que ser local de ua funcion , o no?
  #2 (permalink)  
Antiguo 19/04/2008, 18:24
 
Fecha de Ingreso: marzo-2008
Mensajes: 1
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Declarar matriz sin tamaño

Buenas fran.

Para solucionar esto, podrías hacer uso de dos recursos:

· Dynamic Memory (memoria dinámica)
· El archivo de cabecera "vector"


Antes de nada, hay que dejar claro que no se puede especificar el tamaño de un array en tiempo de ejecución. Es decir, esto es ilegal:

Código:
int n = 0;
cout << "Introduzca el tamaño del array: ";
cin >> n;
float array[n];
No podemos dejar un array sin definir. Hay que especificar su tamaño en tiempo de compilacion (código).

Haciendo uso de la memoria dinámica nos quedaría así:

Código:
int n = 0;
cout << "Introduzca el tamaño del array: ";
cin >> n;
float* array = new float[n];
¡CUIDADO! Recuerda destruir la memoria utilizada con el simbolo "~" delante de la palabra "array". Es decir, así:

Código:
~array;
Bueno, pasamos al segundo recurso que sería el uso de "vector".
Para ello, debes incluir el archivo de cabecera "vector" de la siguiente forma:
Código:
#include <vector>
(no hace falta descargar este archivo de cabecera pues viene por defecto con tu compilador).

Ahora declaramos una variable de tipo "vector<tipo>" de la siguiente forma:
Código:
vector<float> miVector;
(nótese que entre los paréntesis angulares puede ir cualquier tipo: int, float, etc.)

Seguidamente establecemos el tamaño del vector "miVector" de la siguiente forma:

Código:
miVector.resize(12);
Finalmente, he de añadir que puedes obtener el tamaño del vector con la función(método) "size()":

Código:
cout << "Tamaño: " << miVector.size();
-------------------------------

Resumiendo, tu código quedaría así:

Código:
#include <iostream> //Para mostrar/coger datos
#include <vector>    //Para el vector =)
using namespace std;
int main()
{
     vector<int> intVector;
     int longitudVector=0;

     //Sustituye las 3 siguientes lineas para obtener el tamaño desde el fichero:
     cout << "Introduzca el tamano del array: "; 
     cin >> longitudVector;
     intVector.resize(longitudVector);

     for(int i=0; i<longitudVector; ++i)
     {
          intVector[i]=i;
     }
     for(i=0; i<longitudVector; ++i)
     {
          cout << "[" << i << "] = " << intVector[i] << endl;
     }
	 return 0;
}
Espero haberte ayudado.

Salu2...
  #3 (permalink)  
Antiguo 19/04/2008, 19:11
 
Fecha de Ingreso: abril-2008
Mensajes: 19
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Declarar matriz sin tamaño

Muchisimas gracias por la respuesta pero mi problema es que necesito una matriz, funciona tambien para matrices la libreria vector?!?
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 03:24.