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

C++遍历数组按条件存元素到vector时触发std::out_of_range报错求解

C++成绩分类程序越界错误修复

错误原因

你碰到的std::out_of_range越界崩溃和你贴的报错信息完全匹配,核心由3个逻辑问题导致:

  • 声明的passingGrades、failingGrades初始是空vector,长度为0。你直接用.at(x)访问指定下标位置,但空vector没有任何可访问的下标,哪怕访问下标0都会触发越界检查抛出错误
  • 写了完全无用的内层for循环:循环变量y全程没有被使用,加了break之后内层循环只会跑一次,属于冗余代码
  • 下标逻辑错误:两个分类vector的长度是动态变化的(取决于及格/不及格的人数),你用原成绩数组的下标x去访问分类vector的位置,逻辑上就不成立——比如6个成绩里只有2个及格,passingGrades长度只有2,不可能访问到下标2及以上的位置。

修复方案

  1. 删除无用的内层嵌套循环
  2. 不要用下标赋值的方式给空vector加元素,改用push_back()方法往vector末尾追加元素,该方法会自动扩容,不会触发越界
  3. 调整打印逻辑,保证及格、不及格成绩分两行输出,同时修正末尾多余逗号的格式问题

修复后的完整可运行代码如下:

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int userGrades[6]; 
    vector<int> passingGrades; 
    vector<int> failingGrades; 
    
    // 接收6个成绩输入
    for (int i = 0; i < 6; i++) {
        cout << "Enter the grades of Student " << i+1 << ": "; 
        cin >> userGrades[i]; 
    }

    // 按规则分类存入对应vector
    for (int x = 0; x < 6; x++) {
        if (userGrades[x] >= 60) {
            passingGrades.push_back(userGrades[x]);
        } else {
            failingGrades.push_back(userGrades[x]);
        }
    }

    // 单独一行打印及格成绩
    cout << "The passing grades are: "; 
    for (int a = 0; a < passingGrades.size(); a++) {
        cout << passingGrades[a];
        // 最后一个成绩后不打印多余逗号
        if (a != passingGrades.size() - 1) {
            cout << ", ";
        }
    }

    // 换行后单独一行打印不及格成绩
    cout << endl << "The failing grades are: "; 
    for (int b = 0; b < failingGrades.size(); b++) {
        cout << failingGrades[b];
        if (b != failingGrades.size() - 1) {
            cout << ", ";
        }
    }
    cout << endl;

    return 0;
}

额外说明

  • 原代码片段缺失必要的头文件引用和main函数结构,修复代码已经补全,可以直接编译运行
  • 不需要提前计算vector长度存到单独变量里,循环判断条件直接调用.size()即可,避免后续代码修改时出现变量值和实际vector长度不一致的问题
  • vector的.at()方法会做下标越界检查,访问非法位置时会抛出你看到的异常;如果用[]下标运算符访问越界位置不会抛出异常,但会触发内存非法访问的未定义行为,写代码时要注意

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:36:18