vector subscript out of range 错误

#include
#include
using namespace std;
//排序函数必有的交换函数
void swap(int& a, int& b)
{
    int temp = a;
    a = b;
    b = temp;
}
//插入排序
void insertionSort(vector<int> &vec)
{
    cout << vec[0] << endl;
    for (int i = 0; i < vec.size(); i++) {
        for (int j = i+1 ; j > 0 && vec[j]-1];j--) {//视角在右
            swap(vec[j], vec[j - 1]);
        }
    }
}
int main() {
    int arr2[] = { 7,5,7,6,2,4,8,10,11,15,9,2,1,2,3};
    vector<int> vec(arr2, arr2 + sizeof(arr2) / sizeof(arr2[0]));
    /*vec.reserve(100);*/
    insertionSort(vec);
    for (int i = 0; i < vec.size(); i++) {
        cout << vec[i] << " ";
    }


}

img

img

img

如图,当j=i的时候正确,j=i+1为什么就会报错?
请求大家帮忙解决一下我的苦恼!
万分感谢!
o(╥﹏╥)o

基于Monster 组和GPT的调写:

  • 在插入排序的内层循环中,当 j=i+1 时,循环条件是 vec[j]<vec[j-1],因为 j=i+1,所以 j-1=i,即访问到了数组的左边界,此时会导致 vector subscript out of range 错误。

为了避免这种错误,可以在内层循环的条件中增加一个判断条件 j>0,确保 j-1 不会小于 0,即:

for (int j = i + 1; j > 0 && vec[j] < vec[j - 1]; j--) {
    swap(vec[j], vec[j - 1]);
}


这样就可以避免访问数组左边界导致的错误了。