为什么没有这个矢量分配工作?(Why doesn't this vector assignm

2019-10-17 22:52发布

类似的问题:

  • 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;
}

这给了我一个赛格故障,我不知道为什么。

Answer 1:

 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;

已经是未定义行为,不需要进一步的考虑。



文章来源: Why doesn't this vector assignment work?