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

使用C++嵌套vector时是否必须指定大小?无大小为何触发段错误?

问题原因
  • 当你写vector<vector<int>> res(size);时,这个构造函数会直接创建包含size个空vector<int>的容器。此时res[0]到res[size-1]都是合法存在的空向量,你可以直接通过下标访问并调用push_back添加元素,不会越界。
  • 但如果只写vector<vector<int>> res;,res一开始是空容器,里面没有任何元素。这时候你用res[u]或res[v]通过下标访问,本质是在访问容器范围外的内存——因为容器当前大小为0,根本不存在对应下标的元素,这种操作属于未定义行为,直接触发段错误。
修复方法

有两种常用的解决思路:

  1. 提前初始化容器大小(就是你之前能正常运行的写法):
    vector<vector<int>> res(size); // 预分配size个空的vector<int>元素
    
  2. 如果没法提前确定容器大小,先确保要访问的下标位置存在,再执行push_back:
    比如处理res[u].push_back(v)时,可以先检查并扩容:
    // 确保res的大小至少能覆盖下标u
    if (u >= res.size()) {
        res.resize(u + 1); // 扩容到u+1个元素,新增的都是空vector
    }
    res[u].push_back(v);
    
    或者用循环的方式兜底:
    while (res.size() <= u) {
        res.emplace_back(); // 逐个添加空vector,直到能访问res[u]
    }
    res[u].push_back(v);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 02:14:51