Ver Mensaje Individual
  #3 (permalink)  
Antiguo 02/05/2014, 20:49
shikamarucb
 
Fecha de Ingreso: febrero-2014
Mensajes: 107
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Arreglos, vectores y matrices

Pues la duda que tengo es que se supone que para crear una matriz de n*m elementos, tengo que crear un puntero doble que apunte a un puntero etc.... Lo que puse ahi es que yo puse 2 formas, una que no utiliza punteros que se supone que no se puede crear asi, no se supone que se tiene que usar la palabra reservada new para generar memoria dinamica y asi poder crear un matriz de n*m o un vector de n elementos?
Cita:
Iniciado por vangodp Ver Mensaje
¿Y cual es la duda que tienes?
¿Si tienes que usar la dinámica con las matrices?
Con las matrices bidimencionales la forma es hacer como una especie de tabla de tablas
Se usa puntero que apunta a puntero.Primero se crea el puntero que apunta otro puntero que sera las fila, eso permite guardar otro puntero que sera la columna y por eso debe ser un puntero a puntero. Se usa igual que una matriz bidimensional normal, accediendo de esta forma tabla[10][7] = unvalor;
El ejemplo y la explicación la tienes aquí: [url]http://c.conclase.net/curso/?cap=017#inicio[/url]

Código C++:
Ver original
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main() {
  5.     int ** tabla;//"tabla" es un puntero que apunta a un objeto de tipo puntero a int."puntero a puntero"
  6.     int n = 134;
  7.     int m = 231;
  8.     int i;
  9.    
  10.     // Sabemos que un puntero se comporta casi igual que un array, por lo tanto nada nos impide que
  11.     // "tabla" apunte al primer elemento de un array de punteros:
  12.     tabla = new int * [n];
  13.    
  14.     // Ahora estamos en un caso similar, "tabla" apunta a un array de punteros a int,
  15.     // cada elemento de este array puede ser a su vez un puntero al primer elemento de otro array:
  16.     // n arrays de m ints
  17.     for ( i = 0; i < n; i++ ) {
  18.         tabla[i] = new int[m];
  19.     }
  20.  
  21.     // Ahora tabla apunta a un array de dos dimensiones de n * m, podemos acceder a cada elemento
  22.     // igual que accedemos a los elementos de los arrays normales: 
  23.     tabla[21][33] = 123;
  24.     cout << tabla[21][33] << endl;
  25.    
  26.     // Otra diferencia con los arrays normales es que antes de abandonar el programa hay que liberar
  27.     // la memoria dinámica usada, primero la asociada a cada uno de los punteros de "tabla[i]":
  28.     // Liberar memoria:
  29.     for ( i = 0; i < n; i++ ) { delete[] tabla[i]; }
  30.    
  31.     // Y después la del array de punteros a int, "tabla":
  32.     delete[] tabla;
  33.    
  34.     return 0;
  35. }//END OF MAIN

Es muy importante no olvidar usar el delete después para liberar la memoria antes de terminar la función se suele usar los destructores para que se encarguen de realizar esa tarea por ti cuando uses las clases, usa los destructores para liberar la memoria.