C++ vector 下标超出范围

标签 c++ string vector

当我在编译后尝试运行我的程序时,我一直收到这个错误:

vector subscript out of range

我的代码是这样的:

for (int i=1; i<=n; i++) {
    getline(input, line);
    istringstream iss(line);
    iss >> num;
    while (!iss.eof()) {
        iss >> o;
        b.push_back(o);
    }
    sort(b.begin(), b.end);
    se = b.size();
    output << num << " " << b[se-1] << endl;
    b.clear();
    b.resize(100);
}

文件看起来像:

3
1 5 6 1 3 50 600
2 4 5 7 8 3 6
4 1 2 3 4 5 6

那么,问题出在哪里呢?

最佳答案

排序(b.begin(),b.end);

您正在使用 b 的结束函数的地址来排序,而不是 b.end() 将返回的迭代器(如果您调用它的话),因此排序算法会绊倒你的 vector 的末尾,这会导致你报告的“下标超出范围”错误。 (如果您禁用了迭代器调试,它会比报告该错误更糟糕!)

应该是

排序 (b.begin(),b.end());

编辑

您可能还想检查您的 vector 是否不为空,因为这是您可以在其边界之外引用的另一个地方:

se = b.size();
if( se > 0 )
    output << num << " " << b[se-1] << endl;

关于C++ vector 下标超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21089311/

相关文章:

c++ - 如果我只给它一个指向我的对象的指针,std::vector 会占用什么内存?

c++ - 我从 g++ 编译器收到此错误 - 从 ‘int*’ 到 ‘int’ 的无效转换 [-fpermissive]

c++ - 编译器优化

c++ - 什么时候评估 'auto' 和 'decltype'?

jquery - jQuery 中的匹配字符串

javascript - 如果我的字符串测试函数的输入为空,则返回 false

python - 查找两个列表中不包含公共(public)字符的所有字符串对

C++迭代器——奇怪的转换

c++ - 'typename' 和别名模板

vector - 如何从实现 Trait 的类型的向量创建一个新的 Trait 向量?