unsigned long int の非常に大きな配列を割り当てて初期化したいと考えています。この配列は単純な 1 次元配列で、最初の N 個の素数の値を入力したいと考えています。これらを含めるために.cppファイルに吐き出すプログラムがすでにあります。配列を初期化する構文がわかりません。そんなこと知ってる
unsigned long int *known = new unsigned long int[N];
ヒープ上に配列を作成しますが、メンバーを初期化する方法がわかりません。
unsigned long int の非常に大きな配列を割り当てて初期化したいと考えています。この配列は単純な 1 次元配列で、最初の N 個の素数の値を入力したいと考えています。これらを含めるために.cppファイルに吐き出すプログラムがすでにあります。配列を初期化する構文がわかりません。そんなこと知ってる
unsigned long int *known = new unsigned long int[N];
ヒープ上に配列を作成しますが、メンバーを初期化する方法がわかりません。
基本的には、次のように配列をループして、すべての要素に正しい値を割り当てるだけです。
for(size_t idx = 0; idx < N; ++idx)
{
*(known + idx) = retrieve_value(idx);
}
明らかに、retrieve_value
関数が既知の [idx] に割り当てる必要がある適切な値を返します。
ポインター/配列の同等性を利用して、配列構文を使用してコードを記述することもできます。
for(size_t idx = 0; idx < N; ++idx)
{
known[idx] = retrieve_value(idx);
}
そうは言っても、このように配列を新しくする正当な理由がない限り、この場合は std::vector や std::array などの標準コンテナのいずれかを使用することを強くお勧めします。メモリ管理の問題を回避できるからです。最近はほとんど不要です。コンパイル時に N がわかっている場合は、std::array
オーバーヘッドが少なくなる可能性がありstd::vector
ます。利用可能なメモリから最後のバイトを絶対に絞り出す必要がある場合にのみ、生のメモリを扱うことをお勧めします。
配列へのポインターと作成する要素の数を受け入れる配列初期化クラスを作成することをお勧めします。このクラスのグローバル変数を使用します。作成時に、コンストラクターは配列にデータを入力します。
class ArrayInitializer{
ArrayInitializer(unsigned long* ptr, size_t Size);
...
...
};
グローバル変数を作成します
//include your header here,
ArrayInitializer g_arrayInit(known,N);
グローバル変数は、プログラムの実行が開始されるとすぐに作成されます。また、このクラスを使用して、「new」を使用して割り当てられたメモリをクリーンアップすることもできます