类似的问题:
- STL矢量储备()和副本()
- 的std ::矢量储备()和的push_back()比调整更快()和数组索引,为什么呢?
- 的std ::矢量::调整()与标准::矢量::储备()
#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;
}
这给了我一个赛格故障,我不知道为什么。
vvi[0].reserve(1);
vvi[0][0] = 1;
你需要resize
,而不是reserve
。
Accessng元件i
其中i>=v.size()
是未定义的行为。 reserve
影响capacity
,而不是size
。
如果我进入实用方面,我可能会猜测,也许你会摆脱分配vvi[0][0] = 1;
(在释放模式,至少)。 但主要的实际问题就出在这里
vector<int> vi = vvi[0];
的问题是, vvi[0]
的大小为0,所以vi
的内部阵列的大小为0,而不管vvi[0]
的容量。 这就是我想你在哪里得到的赛格故障,之后你
cout << vi[0]; // cout << vvi[0][0]; works
但是,这一切的猜测。 正确回答你的问题是,这
vvi[0].reserve(1);
vvi[0][0] = 1;
已经是未定义行为,不需要进一步的考虑。