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错误。

就在两天前,我在这段代码中执行相同的操作:

vector <vector <int>> frameVecs;

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


在过去的两个月中,这一切都很好。.突然间,我在推回部分开始出现subscript out of range错误,因此我不得不将此特定部分更改为上面的部分,但仍然出现此错误。

我的意思是,vectors的行为如此不确定吗?

PS:getPeaks()返回一个int向量!

最佳答案

我认为push_back不会执行您认为的操作。

vector <vector <int>> frameVecs(4);


将4传递给构造中的向量已经创建了4个空的int-向量。如果push_back 4个向量t1t2t3t4,则将另外4个向量添加到frameVecs,因此在frameVecs中实际上有8个条目。也许删除(4)而只写:

vector <vector <int>> frameVecs;


将解决问题。

例如,如果现在尝试访问frameVecs[0][0](尽管示例中未显示),则会出现错误。

在第四个push_back frameVecs之后如下所示:

frameVecs[0] // empty
frameVecs[1] // empty
frameVecs[2] // empty
frameVecs[3] // empty
frameVecs[4] // contains t1
frameVecs[5] // contains t2
frameVecs[6] // contains t3
frameVecs[7] // contains t4


在此示例中,也不必调用reserve

关于c++ - 在C++中使用2D vector 时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16354695/

10-09 09:04