最初にすべての要素をゼロに初期化せずにstd::vector
、初期化されていない(ゼロ以外の)値を使用して、またはジェネレーター(に類似std::generate_n()
)コンストラクター引数を使用して、目的の非標準(非定数)値を生成する新しいものを作成する方法はありますか?これは、(ランダムな)モックアップ作成APIを可能な限りローカリティ効率の高いものにし、コンテナー要素を1回だけ書き込むためです。(そしておそらく他の人たち)のためのジェネレーターコンストラクターを持っているのは素晴らしいことではないでしょうか?!なぜC++はこれを標準に追加していないのですか?std::vector
次のコンストラクターのようなC関数は、次のカスタム初期化構文に対して私が求める1回限りの書き込み動作を示していますstd::vector
。
// Allocate-and-Generate a random int array of length \p n.
int * gen_rand(size_t n)
{
int *v = malloc(n); // allocate only
for (size_t i=0; i<n; i++) {
v[i] = rand(); // first write
}
}
これは、最初のゼロを書き込む(または書き込まない)責任があるため、使用されるSTLアロケータの動作に要約されると思います。
イテレータでコンストラクタを使用する場合は、std::vector
最初にランダムな値を別の場所に割り当てて書き込む必要があります。これは、を使用するよりもさらに悪いことですpush_back()
。