各要素が構造体である可変サイズの2次元行列が必要です。行数はコンパイル時に認識され、決して変更されません。列の数は行ごとに異なります。私はベクトルのベクトルでこれを実装しましたが、正しく行ったかどうかわかりません:C++:構造体のベクトルのベクトルの問題
struct MyStruct {
int a, b;
MyStruct(int arg_a, int arg_b) { a = arg_a; b = arg_b; };
};
int main(void) {
vector < vector<MyStruct> > myVVOfStructs;
myVVOfStructs.reserve(10); // Intended to reserve 10 rows of variable size vectors
vector<MyStruct> tmpVector = myVVOfStructs[5];
tmpVector.push_back(MyStruct(10, 20));
}
これは正しい方法ですか?上記のスニペットは、それをC++ファイルに単独で置くと動作します。しかし、私のはるかに大きいC++プログラムでは、上記の私はそれをやっている方法に問題がなければならない、
terminate called after throwing an instance of 'std::bad_alloc'
だから、このメッセージで失敗し、それは簡単なC++ソースファイルで動作しますので、恋するベーカリーより複雑なプログラムではそうではありません。何か案は?それを行うより良い方法はありますか?
続き編集:この質問に対する回答は、「ベクターの予備(when)をいつ使うべきか」という別の質問に答えがあります。問題は、その答えを見つけるために、私はすでにreserve()が問題の原因であることを知る必要があるということです。それが立っているので、reserve()が私の問題の原因であるかどうか分からなかったので、そのタイトルのページを読んだことはありませんでした。私がすでにそれを知っていれば、私は自分自身で問題を理解するのに十分知っていたはずです。
:あなたがメソッドを使用すべきベクトルの大きさを変化させるためには
。だから私はあなたの中の何か他のものが大規模なプログラムが非常に飢えていると仮定します。 – StoryTeller
私のC++の知識は少し錆びますが、どうやってmyVVOfStructsを呼び出しますか?ベクトルをインスタンス化していないときにreserve(10)を宣言しただけですか? –
また、 'std :: vector> vv = {{{10,20}、{30,40}、<その他の構造体}}、<その他の構造体のベクトル> }; '、もしあなたがC++ 11を使っているなら、 –