gpt4 book ai didi

c++ - 为什么这个 vector 赋值不起作用?

转载 作者:行者123 更新时间:2023-11-30 00:36:36 25 4
gpt4 key购买 nike

类似问题:


#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

访问元素 i 其中 i>=v.size() 是未定义的行为。 reserve 影响capacity,而不是size

如果我要进入实际方面,我可能会推测也许您可以通过赋值 vvi[0][0] = 1;(至少在 Release模式下) .但主要的实际问题就在这里

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;

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

关于c++ - 为什么这个 vector 赋值不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15732196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com