0
vector <vector <int>> frameVecs(4);
vector <int> t1 = getPeaks (vec1);
vector <int> t2 = getPeaks (vec2);
vector <int> t3 = getPeaks (vec3);
vector <int> t4 = getPeaks (vec4);

frameVecs[0].reserve(t1.size());
frameVecs[1].reserve(t2.size());
frameVecs[2].reserve(t3.size());
frameVecs[3].reserve(t4.size());

frameVecs.push_back (t1);
frameVecs.push_back (t2);
frameVecs.push_back (t3);
frameVecs.push_back (t4);

subscript out of rangeスニペットのプッシュバック部分で常にエラーが発生します。

ちょうど 2 日前、私は同じことを行う次のコードを使用していました。

vector <vector <int>> frameVecs;

frameVecs.push_back (getPeaks (vec1));
frameVecs.push_back (getPeaks (vec2));
frameVecs.push_back (getPeaks (vec3));
frameVecs.push_back (getPeaks (vec4));

そして、これは過去2か月間問題なく実行されていました..突然subscript out of range、プッシュバック部分でエラーが発生し始めたため、この特定の部分をその上の部分に変更する必要がありましたが、それでもこのエラーが発生しています.

vectorsつまり、彼らの行動がとても不確実ですか?

PS: getPeaks() はintベクトルを返します!

4

2 に答える 2

0

Excelciusの答えは良いですが、あなたがやろうとしていると私が思うことを行う別の方法があります.

vector <vector <int>> frameVecs(4);
frameVecs[0] = getPeaks (vec1);
frameVecs[1] = getPeaks (vec2);
frameVecs[2] = getPeaks (vec3);
frameVecs[3] = getPeaks (vec4);

ここで重要なことは、このコードがあなたのコードよりも単純だということです。単純なものがコードと同じくらい複雑になる場合、何かが間違っていることを明確に示しています。

主な誤解は、コンストラクターでベクターのサイズを設定するか、push_back を使用して動的にサイズを大きくするのいずれかであり、両方を行うことはめったにありません。

于 2013-05-03T09:01:57.170 に答える