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
向量!
答案 0 :(得分:4)
我认为push_back
不符合你的想法。
vector <vector <int>> frameVecs(4);
将4传递给构造上的向量已经创建了4个空int
- 向量。如果您push_back
4个向量t1
,t2
,t3
和t4
,则向frameVecs
添加另外4个向量,因此实际上有8个向量frameVecs
中的条目。也许删除(4)
并写下:
vector <vector <int>> frameVecs;
将解决问题。
如果您现在尝试访问frameVecs[0][0]
(例如,虽然未在您的示例中显示),但您会收到错误消息。
第4个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
。
答案 1 :(得分: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动态增加大小,很少你想要同时做