HOME > natural science Laboratory > コンピュータ・シミュレーション講座 > TIPS 集

C++多重配列用のメモリ確保の方法(std::unique_ptr)

文責:遠藤 理平 (2018年7月 9日) カテゴリ:TIPS 集(105)

数値計算時に巨大な配列を組む必要がある。通常の変数や配列宣言でメモリを確保するスタック領域では、巨大配列を記憶するメモリが足らない場合がよくある。そんなときに利用するのが、スタック領域に比べて巨大なヒープ領域での動的なメモリ確保。

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;

}

実行結果

20180709-1.png



タグ:

▲このページのトップNPO法人 natural science トップ

▲このページのトップNPO法人 natural science トップ