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)
这给了我一个段错误,我不知道为什么.
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)
已经有未定义的行为,不需要进一步的考虑.
| 归档时间: |
|
| 查看次数: |
1475 次 |
| 最近记录: |