プリミティブの配列、たとえば整数配列を 0 に初期化する方法はありますか? forループを使わずに?for ループを含まない簡潔なコードを探しています。
:)
プリミティブの配列、たとえば整数配列を 0 に初期化する方法はありますか? forループを使わずに?for ループを含まない簡潔なコードを探しています。
:)
int array[10] = {}; // to 0
std::fill(array, array + 10, x); // to x
より一般的な方法で終了する場合は、次のように注意してください。
template <typename T, size_t N>
T* endof(T (&pArray)[N])
{
return &pArray[0] + N;
}
取得するため:
std::fill(array, endof(array), x); // to x (no explicit size)
言及する必要があるstd::fill
のは、回避しようとしているループの単なるラッパーであり= {};
、そのような用語で実装される可能性があります。
はい、可能です。初期化方法はコンテキストによって異なります。
静的配列またはローカル配列を宣言する場合は、= {}
初期化子を使用します
int a[100] = {}; // all zeros
で配列を作成する場合は、初期化子new[]
を使用します()
int *a = new int[100](); // all zeros
コンストラクター初期化子リストで非静的メンバー配列を初期化する場合は、初期化子を使用し()
ます
class C {
int a[100];
C() : a() // all zeros
{
...
}
};
すべての値をゼロにしたい場合は、 memset を使用できます。また、ゼロに初期化するだけの場合は、メモリの ZI セクションに配置されるように配列を宣言できます。
数値がゼロの場合は、memset を使用することもできます (ただし、これはより C スタイルです)。
int a[100];
memset(a, 0, sizeof(a));
さまざまな構文で何をしているのかを隠す方法があり、これは他の回答が提供するものです-std::fill, memset, ={}
など。一般的なケースでは(ZIのようなコンパイラ固有のトリックを除く)、何をする必要があるかを考えてくださいコンパイルされたコードによって:
言い換えれば、かなり基本的な方法でループが必要です。
double A[10] = { value }; // initialize A to value
. 値を定数にコンパイルする必要があるかどうかは覚えていません。自動配列では機能しません