You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中vector<vector<int>>两种初始化区别及访问段错误问题咨询

段错误触发原因

vector<vector<int>> vec(n) 这类带长度参数的初始化逻辑,是直接生成包含n个空一维vector的二维容器,后续你调用push_back添加元素时,新元素会被追加到这n个空元素的末尾,而非覆盖原有空元素。你访问vec[1][2]时,索引为1的位置还是初始化自带的空vector,没有任何存储元素,访问下标2直接触发数组越界,所以出现段错误。

你之前无参初始化vector<vector<int>> vec时,容器初始为空,每次push_back的元素都会按顺序填充从0开始的下标位置,只要你存入的第二个一维vector(下标1)长度≥3,访问vec[1][2]就不会有问题。

带初始长度写法的正确修改方案

如果要使用vector<vector<int>> vec(n)的初始化方式,不需要额外调用push_back添加外层元素,直接对对应下标的一维vector操作即可,代码修改如下:

int n;
cin >> n;
// 初始化时已生成n个空一维vector
vector<vector<int>> vh(n);
int size, input;
for (int i = 0; i < n; i++)
{
    cin >> size;
    for (int j = 0; j < size; j++)
    {
        cin >> input;
        // 直接给第i个一维vector添加元素
        vh[i].push_back(input);
    }
}

内容的提问来源于stack exchange,提问作者Bala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 07:09:04