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个向量t1
,t2
,t3
和t4
,则将另外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/