c++ - C ++插入排序错误功能不起作用
问题描述
该程序仅显示一个奇怪的错误,例如:
libc++abi.dylib: terminating with uncaught exception of type std::out_of_range: vector
代码:
void sortlist(vector<int> &list) { // for sorting
int i, j, temp;
for (i = 1; i < list.size(); i++) {
temp = list.at(i);
j = i - 1;
while (temp < list.at(j) && j >= 0) {
list.at(j + 1) = list.at(j);
j = j - 1;
}
list.at(j + 1) = temp;
}
}
解决方案
temp < list.at(j)
超出范围j == -1
,因为j >= 0
为时已晚。
通常,当您进行此类手动边界检查时,边界检查应始终排在第一位,而不是在您使用索引之后:
while ( j >= 0 && temp < list.at(j))
其实我不明白你得到的错误有什么“奇怪”。使用的唯一动机at
是获得该异常。无论是否被抓住,它都会告诉你你已经出界了。使用调试器应该可以帮助您找出错误的确切位置。
推荐阅读
- mongodb - 在跟踪集合上的更新操作时,如何在使用 kafka mongodb 源连接器时获取完整文档?
- javascript - 如何使用日期和时间库显示 am 而不是 AM?
- c++ - 如何使用 C++ 应用程序制作屏幕截图?[•已解决•]
- ios - 如何在 swift5 中每 30 分钟调用一次 API?
- android - 从 android studio 连接 django devserver 失败
- java - 从通过 singleSnapshot 获取值的类对象中使用 getter 函数时出现问题。安卓,Java
- javascript - 为什么在 script 标签中设置 async 或 defer 时无法执行 Javascript 代码?
- tesseract - Tesseract tesstrain.sh 找不到字体
- angular - 如何在角度传单地图上将 GeoJson 特征属性显示为标签?
- amazon-web-services - 如何以编程方式获取实例类型的内存/cpu 值?