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

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

次のリビジョン
前のリビジョン
ja:cpp:array [2017/05/14 05:56]
kota 作成
ja:cpp:array [2017/05/14 08:35] (現在)
kota [std::fill()を使った初期化]
ライン 6: ライン 6:
  
 === 1次元配列 === === 1次元配列 ===
-  ​double *array+<code cpp> 
-  int n1 = 10; + //////////​ 確保 //////////​ 
-  ​array = new double[n1];+ double *array1
 + int n1 = 10; 
 + ​array1 = new double[n1];​ 
 + 
 + //////////​ 解放 //////////​ 
 + ​delete[] array1; 
 +</​code>​ 
 + 
 +---- 
 + 
 + 
 +=== 2次元配列 === 
 +== 方法1 == 
 +  ​* 一度に確保できるのは1次元までなので、1次元ずつ確保していく。 
 +  * 解放も同様に1次元ずつ。 
 +  * 配列ポインタへの配列、という扱いで、最初の足ごとに配列の要素数を変えることも可能 
 +<code cpp> 
 + //////////​ 確保 //////////​ 
 + ​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; 
 +</​code>​ 
 + 
 +== 方法2 == 
 +後ろの足のサイズが先に決まっている場合、最初の足だけ動的に確保してやるやり方もできる。 
 +<code cpp> 
 + //////////​ 確保 //////////​ 
 + ​double (*array2)[20];​ 
 + int n1 = 10; 
 + ​array2 = new double[n1][20];​ 
 + 
 + //////////​ 解放 //////////​ 
 + ​delete[] array2; 
 +</​code>​ 
 + 
 +== 方法3 == 
 +std::​vectorでやっちゃう 
 +<code cpp> 
 + int n1 = 10; 
 + int n2 = 20; 
 + ​std::​vector<​ std::​vector<​double>​ > array2( n1, std::​vector<​double>​(n2) ); 
 +</​code>​ 
 +---- 
 + 
 +=== 3次元配列 === 
 +2次元と同様。 
 +<code cpp> 
 + //////////​ 確保 //////////​ 
 + ​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; 
 +</​code>​ 
 + 
 +---- 
 + 
 +===== 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で初期化。 
 +<code cpp> 
 + #​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);​ 
 + 
 +</​code>​
ja/cpp/array.1494741391.txt.gz · 最終更新: 2017/05/14 05:56 by kota