C++ 2D dynamic array
(1) Allocate memory in stack for static 2D array (constant dimensions)
const int row=5;
const int col=3;
double matrix[row][col];
(2) Allocate memory in heap for partially dynamic 2D array (if the column dimension is constant)
int row=5;
double (*matrix)[col] = new double[row][col];
(3) Allocate memory for fully dynamic 2D array (continuous memory)
int i,j, row=5, col=3;
double **matrix = new double* [row];
matrix[0] = new double [row*col];
for (i=1; i<row; ++i)
matrix[i] = matrix[i-1] + col;
for (i=0; i<row; i++)
for (j=0; j<col; j++) {
matrix[i][j] = 0; //do something
}
delete [] matrix[0];
delete [] matrix;
(4) Allocate memory for fully dynamic 2D array (uncontinuous memory)
int i,j, row=5, col=3;
double **matrix = new double* [row];
for(int i=0;i<row;i++)
matrix[i]=new double[col];
for (i=0; i<row; i++)
for (j=0; j<col; j++)
matrix[i][j] = 0;
for(i=0;i<row;i++)
delete [] matrix[i];
delete [] matrix;
(5) Use 1D array as 2D array
double *array = new double [row*col];
for (i=0; i<row; i++)
for (j=0; j<col; j++) matrix[i*col+j] = 0;
delete [] array;
(6) Use C++ STL vector container, dimension can be changed during runtime.
vector<vector<double>> matrix(row,vector<double>(col));
matrix[i][j] = 6;
If you want to initialize it then use :
vector<vector<double>> matrix(row,vector<double>(col,0));
Example: 2D Complex matrix using STL
#include <vector>
#include <complex>
using namespace std;
const int N = 2;
typedef std::complex<double> Complex;
typedef std::vector<vector<Complex> > Complex_Matrix;
int GenInitialCondition(Complex_Matrix &sigma);
int main (int argc, char *argv[]) {
Complex_Matrix sigma(N,vector<Complex>(N,0.0)); //initialize to be 0
//to get the values of real or imaginary part:
double re, im;
re = sigma[0][0].real() + sigma[1][1].real();
im = sigma[0][0].imag() + sigma[1][1].imag();
return 0;
}
int GenInitialCondition(Complex_Matrix &sigma) {
for (int i = 0 ; i < N ; i++)
for (int j = 0 ; j < N ; j++)
sigma[i][j] = 0;
//to assign real or imaginary part:
sigma[0][0].real(5.0);
sigma[0][0].imag(1.0);
return 0;
}
For dynamically allocated array in C++ class, see http://www.cs.fsu.edu/~jestes/cop3330/notes/dma.html
Leave a Comment