gpt4 book ai didi

C++ vector 下标超出范围

转载 作者:行者123 更新时间:2023-11-30 01:19:17 24 4
gpt4 key购买 nike

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com