amarin dijo:
Hola a todos:
Soy nuevo en este foro y quisiera formular una pregunta para ver quien me puede colaborar. Necesito trabajar en C++ con asignación dinámica de memoria para arreglos de 2 o mas dimensiones y no se como hacerlo, si alguien me puede colaborar se lo agradeceria.
amarin.
Hola, pues aqui le hice algo con lo que puede empezar, y se usa así:
Al usar el constructor debe pasar el numero de filas y numero de columnas:
Array2D miArray(
filas,
columnas);
Para insertar un elemento debe dar la fila, la cumna y el valor a insertar:
miArray.insertar(
filas,
columnas,
valor);
Para ver el valor de un posicion debe la fila, la cumna:
miArray.retorna(
filas,
columnas)
Ahora digo empezar por lo siguiente:
- la clase solo puede ser usada con matrices de NxN (numero de filas = numero de columnas).
- Si tiene un 'Array2D' de 100 posiciones usted puede ver la posicion 106, 110, 300, etc. Es decir se puede salir del tamaño maximo del Array2D (si quiere puede hacer un metodo para controlar esto).
- Si desea usar el metodo 'crecer' (que hacer lo que usted pide asignar memoria a nuevos elementos), debe hacerlo asignando el mismo numeros de filas y columnas, recuerde que solo sirve con arreglos de NxN.
- Como puede ver solo se pueden guardar datos de tipo entero.
#include <iostream>
#include <vector>
#include <conio.h>
using namespace std;
//INICIA DECLARACION Y DEFINICION DE ARRAY2D
class Array2D {
int f;
int c;
vector<int> datos;
public:
Array2D (const int filas, const int cols) : f(filas), c(cols){
for (int i = 0; i < (f*c); ++i)
datos.push_back(0);
}
void insertar (const int fila, const int cols, const int valor){
datos[((fila-1)*f + cols - 1)] = valor;
}
int retorna (const int fila, const int cols){
return datos[((fila-1)*f + cols - 1)];
}
void crecer (const int filas, const int cols){
f = f + filas;
c = c + cols;
for (int i = static_cast<int>(datos.size())+1; i < (f*c)+1; ++i)
datos.push_back(0);
}
void verTamano (void){
std::cout << "TAMANO DE Array2D :" << static_cast<int>(datos.size()) << std::endl;
}
int getFilas(void){
return f;
}
int getColumnas(void){
return c;
}
};//FIN DE DECLARACION Y DEFINICION DE ARRAY2D
int main()
{
Array2D miArray(10,10);
miArray.verTamano();
miArray.insertar(3,5,6);
cout << "VALOR QUE HABIA INSERTADO EN LA POSICION (3,5) :" << miArray.retorna(3,5) << endl;
miArray.crecer(3,3);
int nu = 0;
for (int i = 1; i <= miArray.getColumnas(); ++i)
for (int r = 1; r <= miArray.getFilas(); ++r) {
++nu;
miArray.insertar(r,i,(nu));
}
for (int i = 1; i <= miArray.getColumnas(); ++i)
for (int r = 1; r <= miArray.getFilas(); ++r)
cout << miArray.retorna(r,i) << endl;
miArray.verTamano();
getch();
return 0;
}