类似的问题:
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<vector<int> > vvi;
vvi.resize(1);
vvi[0].reserve(1);
vvi[0][0] = 1;
vector<int> vi = vvi[0];
cout << vi[0]; // cout << vvi[0][0]; works
return 0;
}
这给了我一个段错误,我不知道为什么。
答案 0 :(得分:7)
vvi[0].reserve(1);
vvi[0][0] = 1;
您需要resize
,而不是reserve
。
访问元素i
,其中i>=v.size()
是未定义的行为。 reserve
影响capacity
,而非size
。
如果我要进入实际方面,我可能会推测,或许你可能会放弃作业vvi[0][0] = 1;
(至少在发布模式下)。但主要的实际问题在于
vector<int> vi = vvi[0];
问题是vvi[0]
的大小为0,因此vi
的内部数组大小为0,无论vvi[0]
的容量如何。那就是我想你在哪里得到了seg错误
cout << vi[0]; // cout << vvi[0][0]; works
但这都是猜测。你的问题的正确答案是这个
vvi[0].reserve(1);
vvi[0][0] = 1;
已经有未定义的行为,无需进一步考虑。