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

C++二维vector下标越界问题求助:Codeforces题目实现报错

解决vector下标越界问题

你的代码触发“vector subscript out of range”错误的核心原因是:vector<vector<int>>x(t) 仅创建了包含t个空vector的二维容器,每个子vector没有任何元素,直接通过x[i][j]访问下标自然会越界。

以下是三种可行的修复方案:

方案1:提前resize子vector空间

先给第i行的子vector分配n[i]个元素的空间,之后就可以用下标直接赋值:

#include <iostream>
#include <vector>

using namespace std;

int main() {
    int t;
    cin >> t;
    vector<int> n(t);
    vector<vector<int>> x(t);

    for (int i = 0; i < t; i++) {
        cin >> n[i];
        x[i].resize(n[i]); // 为第i行分配n[i]个元素的空间
        for (int j = 0; j < n[i]; j++) {
            cin >> x[i][j];
        }
    }

    return 0;
}

方案2:用push_back逐个添加元素

不需要提前分配空间,读取一个元素就添加到对应子vector中:

#include <iostream>
#include <vector>

using namespace std;

int main() {
    int t;
    cin >> t;
    vector<int> n(t);
    vector<vector<int>> x(t);

    for (int i = 0; i < t; i++) {
        cin >> n[i];
        int num;
        for (int j = 0; j < n[i]; j++) {
            cin >> num;
            x[i].push_back(num); // 自动扩展子vector空间
        }
    }

    return 0;
}

方案3:用emplace_back直接构造子vector

在二维vector中直接构造指定大小的子vector,避免额外拷贝操作:

#include <iostream>
#include <vector>

using namespace std;

int main() {
    int t;
    cin >> t;
    vector<int> n(t);
    vector<vector<int>> x;

    for (int i = 0; i < t; i++) {
        cin >> n[i];
        x.emplace_back(n[i]); // 构造大小为n[i]的子vector并加入x
        for (int j = 0; j < n[i]; j++) {
            cin >> x[i][j];
        }
    }

    return 0;
}

内容的提问来源于stack exchange,提问作者غيمرمان Gamerman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:55:04