вектор erase () итератор вне диапазона - PullRequest
0 голосов
/ 07 мая 2020

Я получаю сообщение об ошибке (vector erase() iterator out of range) в этой строке:

t[i].erase(t[i].begin()+k);

ввод:

4
9 2 7 8
6 4 3 7
5 8 1 8
7 6 9 4

Ошибка появляется после того, как мне исполнилось 2 года, она работает для i = 0,1, почему?


#include <iostream>
#include <vector>
using namespace std;
int main(){
    int N, input;
    cin >> N;

    vector <vector <int>> t;
    int* a = new int [N];
    t.resize(N);

    for (int i = 0 ; i < N ; i++)
        for (int j = 0 ; j < N ; j++){
            cin >> input;
            t[i].push_back(input);
        }

    int minI = 0, minJ = 0;
    for (int i = 0 ; i < N ; i++){
        for (int j = 0 ; j < N ; j++){
            if (t[i][j] < t[minI][minJ]){
                minI = i;
                minJ = j;
            }
        }
        a [minI] = minJ;
        for (int k = 0 ; k < N ; k++)
            t[i].erase(t[i].begin() + k);
    }

    for (int i = 0 ; i < N ; i++)
        cout << a[i] << endl;

    delete [] a;
    system ("pause");
}

Вот пи c ввода: enter image description here

и пи c Ошибка: enter image description here

1 Ответ

1 голос
/ 07 мая 2020

По мере того, как вы стираете элементы вектора, вектор становится меньше. Поскольку ваш l oop будет N, в конечном итоге l oop index k станет больше, чем оставшийся вектор.

...