C++用vector实现插入排序打印前10个元素报参数无效异常如何解决
报错原因
- 循环首次执行时
j=0,list.begin()与list.begin()+0是相同迭代器,构造出的arr是空vector,调用arr.front()访问空容器的首元素属于非法操作,直接触发参数错误异常。 - 当前逻辑也不符合打印前10个元素的需求:你构造的
arr是原vector的前j个元素,取front()只会每次输出原vector的第一个元素,最终会重复打印10次第一个值。
修复方案
完全不需要额外构造子vector,直接遍历原vector的前10个下标即可,修改打印部分的循环代码:
cout << "first 10 value in list is:"; // 额外增加j < list.size()判断,避免size小于10时出现越界访问 for (int j = 0; j < 10 && j < list.size(); j++) { cout << list[j] << ", "; }
如果确实需要通过构造子vector的方式实现,可修改为:
for (int j = 0; j < 10 && j < list.size(); j++) { vector<int> arr(list.begin() + j, list.begin() + j + 1); cout << arr.front() << ", "; }
但该方案存在大量无意义的vector构造销毁开销,不推荐使用。
内容的提问来源于stack exchange,提问作者kali
相关产品推荐
相关产品推荐

