C++多重配列用のメモリ確保の方法(std::unique_ptr)
数値計算時に巨大な配列を組む必要がある。通常の変数や配列宣言でメモリを確保するスタック領域では、巨大配列を記憶するメモリが足らない場合がよくある。そんなときに利用するのが、スタック領域に比べて巨大なヒープ領域での動的なメモリ確保。
C++ソース
/* std::unique_ptrの使い方 */ #include <memory> #include <iostream> #include <string> int main(){ //1次元配列---------------------------------------------------------- std::cout << "1次元配列" << std::endl; // int型10個分の領域を動的確保 std::unique_ptr< int[] > a(new int[10]); for (int i = 0; i<10; ++i){ a[i] = i; std::cout << a[i] << " "; } std::cout << std::endl << std::endl; //2次元配列-------------------------------------------------------- std::cout << "2次元配列" << std::endl; // int型5×10個分の領域を動的確保 std::unique_ptr< int[][10] > a2(new int[5][10]); for (int i = 0; i<5; ++i) { for (int j = 0; j<10; ++j) { a2[i][j] = (i + 1)*(j + 1); std::cout << a2[i][j] << " "; } std::cout << std::endl; } std::cout << std::endl; //3次元配列-------------------------------------------------------- std::cout << "3次元配列" << std::endl; // int型5×10個分の領域を動的確保 std::unique_ptr< int[][2][10] > a3(new int[5][2][10]); for (int i = 0; i<5; ++i) { for (int j = 0; j<2; ++j) { for (int k = 0; k<10; ++k) { a3[i][j][k] = (i + 1)*(j + 1)*(k + 1); std::cout << a3[i][j][k] << " "; } std::cout << std::endl; } } std::string s; std::cin >> s; }
実行結果