////////// 確保 ////////// double *array1; int n1 = 10; array1 = new double[n1]; ////////// 解放 ////////// delete[] array1;
////////// 確保 ////////// double **array2; int n1 = 10; int n2 = 20; array2 = new double*[n1]; for(int i = 0 ; i < n1 ; ++i){ array2[i] = new double[n2]; } ////////// 解放 ////////// for(int i = 0 ; i < n1 ; ++i){ delete[] array2[i]; } delete[] array2;
後ろの足のサイズが先に決まっている場合、最初の足だけ動的に確保してやるやり方もできる。
////////// 確保 ////////// double (*array2)[20]; int n1 = 10; array2 = new double[n1][20]; ////////// 解放 ////////// delete[] array2;
std::vectorでやっちゃう
int n1 = 10; int n2 = 20; std::vector< std::vector<double> > array2( n1, std::vector<double>(n2) );
2次元と同様。
////////// 確保 ////////// double ***array3; int n1 = 10; int n2 = 20; int n3 = 20; array3 = new double**[n1]; for(int i = 0 ; i < n1 ; ++i){ array3[i] = new double*[n2]; for(int j = 0 ; j < n2 ; ++j){ array3[i][j] = new double[n3]; } } ////////// 解放 ////////// for(int i = 0 ; i < n1 ; ++i){ for(int j = 0 ; j < n2 ; ++j){ delete[] array3[i][j]; } delete[] array3[i]; } delete[] array3;
#include <algorithm> double array1[10]; std::fill(array, &array[10], 1); std::fill(array, array+10, 1);//これでもOK std::fill_n(array, 10, 1);//これでもOK double array2[10][20]; std::fill(array2[0],array2[10],1); double array3[10][20][30]; std::fill(array3[0],array3[10],1);