Buen día para todos.
Se me pidió convertir un array de varias dimensiones en un vector unidimensional de dos maneras, uno por medio de apuntadores con doble indireccion y la otra por medio de una formula ; i*8+j, la que aun no entiendo como aplicarla o usarla para pasar el array a vector, aquí está mi código con doble indireccion, alguno podria explicarme como funciona el pasar el arrary a vector con esa formula??? Gracias.
#include<iostream>
using namespace std;
int main()
{
int array[2][3];
int contador = 1;
int vector[6];
int **vector_apuntadores[6];
int *apuntador_arrays[2][3];
int contador_2=0;
//Arreglo bidimensional:
for (int i=0;i<2;i++)
{
for(int j=0;j<3;j++)
{
array[i][j]= contador;
cout << "["<<array[i][j]<<"]";
contador++;
}
cout<<"\n";
}
cout << "\n\n";
//Paso del arreglo bidimensional a un vectorapuntador_arrays[i][j] por medio de doble indireccion:
for(int i=0;i<2;i++)
{
for(int j=0;j<3;j++)
{
apuntador_arrays[i][j]=&array[i][j]
; vector_apuntadores[contador_2] = &apuntador_arrays[i][j];
vector[contador_2] = **vector_apuntadores[contador_2];
cout << "["<<vector[contador_2]<<"]";
contador_2++;
}
cout<<"\n" ;
}
system ("pause");
return 0;
}
Se me pidió convertir un array de varias dimensiones en un vector unidimensional de dos maneras, uno por medio de apuntadores con doble indireccion y la otra por medio de una formula ; i*8+j, la que aun no entiendo como aplicarla o usarla para pasar el array a vector
Esa formula solo es un ejemplo que te dieron, supongo yo, al usar una matriz con ocho columnas por fila. La expresión que debes utilizar es:
pos = fila * columnas_x_fila + columna
Y se debe a que, siguiendo el ejemplo de una matriz de 8x8, las filas de la matriz terminan en las posiciones del array de esta forma:
La primera fila en las posiciones 0 .. 7
La segunda fila en las posiciones 8 .. 15
La tercera fila en las posiciones 16 .. 23
Un programa de ejemplo basado en el tuyo:
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
const int num_filas = 2;
const int num_cols = 3;
int main()
{
int aa[num_filas][num_cols];
int a[num_filas * num_cols];
//Array de arrays de ints
for (int i = 0; i < num_filas; i++)
for (int j = 0; j < num_cols; j++){
aa[i][j] = i * num_cols + j; // Para ejemplificarlo mejor
cout << "aa[" << i << "][" << j << "] == " << aa[i][j] << endl;
int pos = i * num_cols + j;
a[pos] = aa[i][j];
}
cout << endl;
// Array de ints
for (int i = 0; i < num_filas * num_cols; i++)
cout << "a[" << i << "] == " << a[i] << endl;
return 0;
}
Un saludo