Deprecated: Array and string offset access syntax with curly braces is deprecated in /mnt/hep_web/hep_web/member/n-kota/dokuwiki/inc/init.php on line 542
ja:cpp:array [GiriWiki]

ユーザ用ツール

サイト用ツール


ja:cpp:array

配列


動的メモリ確保・解放

1次元配列

 ////////// 確保 //////////
 double *array1;
 int n1 = 10;
 array1 = new double[n1];
 
 ////////// 解放 //////////
 delete[] array1;

2次元配列

方法1
  • 一度に確保できるのは1次元までなので、1次元ずつ確保していく。
  • 解放も同様に1次元ずつ。
  • 配列ポインタへの配列、という扱いで、最初の足ごとに配列の要素数を変えることも可能
 ////////// 確保 //////////
 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;
方法2

後ろの足のサイズが先に決まっている場合、最初の足だけ動的に確保してやるやり方もできる。

 ////////// 確保 //////////
 double (*array2)[20];
 int n1 = 10;
 array2 = new double[n1][20];
 
 ////////// 解放 //////////
 delete[] array2;
方法3

std::vectorでやっちゃう

 int n1 = 10;
 int n2 = 20;
 std::vector< std::vector<double> > array2( n1, std::vector<double>(n2) );

3次元配列

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;

std::fill()を使った初期化

  • fillの引数は、(first Iterator、last iterator, value)
  • std::vector とかだとstd::fill(vector.begin(), vector.end(), value);とかstd::fill_n(vector.begin(), vector.size(), value);
  • 以下のコードではいずれも1で初期化。
 #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);
ja/cpp/array.txt · 最終更新: 2017/05/14 08:35 by kota