こんにちは、すべての要素をゼロベクトルに初期化したいのですが、要素がサイズのベクトル、例えば5であるサイズ9のベクトルを初期化したいとします。ベクトルのベクトルを初期化する<doubles> C++
この方法は正しいですか?
vector<double> z(5,0);
vector< vector<double> > diff(9, z);
または、これを行うには、これより短い方法がありますか?
こんにちは、すべての要素をゼロベクトルに初期化したいのですが、要素がサイズのベクトル、例えば5であるサイズ9のベクトルを初期化したいとします。ベクトルのベクトルを初期化する<doubles> C++
この方法は正しいですか?
vector<double> z(5,0);
vector< vector<double> > diff(9, z);
または、これを行うには、これより短い方法がありますか?
あなたが潜在的に単一のラインでこれを行うことができます:
vector<vector<double> > diff(9, vector<double>(5));
あなたはまた、より効率的なストレージおよびアクセスのためのboost::multi_arrayを使用して検討する必要があります(これは、ダブルポインタの間接化を避けます)。
また、アクセスをストライドした45個の要素のベクトルでも十分です。 –
'ベクトル
これは動作しますかなり確信して:あなたは1行にすべてを置くことができます
vector< vector<double> > diff(9, vector<double>(5,0));
vector< vector<double> > diff(9, std::vector<double>(5, 0));
ただしが使用できるサイズはコンパイル時に知られている特定のケースでC列:
double diff[9][5] = { { 0 } };
サイズが固定されている場合は、代わりにstd::array
に行くことができます:
std::array<std::array<double,5>,9> diff = {};
また、エクステントの大きさによっても異なります。 'std :: array'はすべてをローカルスコープに保持します。その配列が大きすぎると、私の名前をエスケープするエラーが発生します。 –
スタックオーバーフロー? –
これは、2Dベクトルを作成する正しい方法です。あなたはもう少し冗長になっているだけです。 –
この9x5サイズは固定ですか? –
はい手前のサイズを知っています。ちょうど9と5を選択して、この質問のためにいくつかのランダムなintとする。 – smilingbuddha