当我在编译后尝试运行我的程序时,我一直收到这个错误:
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/