为什么这个向量分配不起作用?

Ykt*_*ula 1 c++ stdvector assignment-operator copy-assignment

类似问题:


#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;
}
Run Code Online (Sandbox Code Playgroud)

这给了我一个段错误,我不知道为什么.

Arm*_*yan 7

 vvi[0].reserve(1);
 vvi[0][0] = 1;
Run Code Online (Sandbox Code Playgroud)

你需要resize,没有reserve.

Accessng元素i,其中i>=v.size()是不确定的行为.reserve影响capacity,而不是size.

如果我要进入实际方面,我可能会推测,也许你可能会完成任务vvi[0][0] = 1;(至少在发布模式下).但主要的实际问题在于此

vector<int> vi = vvi[0];
Run Code Online (Sandbox Code Playgroud)

问题是vvi[0]大小为0,因此vi内部数组大小为0,无论vvi[0]容量如何.这就是我认为在你之后你遇到了seg错误的地方

cout << vi[0]; // cout << vvi[0][0]; works
Run Code Online (Sandbox Code Playgroud)

但这都是猜测.你的问题的正确答案是这个

vvi[0].reserve(1);
vvi[0][0] = 1;
Run Code Online (Sandbox Code Playgroud)

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

  • 另外,`vii [0] [0]`"工作",因为`vii [0]`中的向量对象确实确保数组在偏移量为0时有一个元素,但是不需要容量来存活副本施工. (2认同)