vector erase() 迭代器超出范围
vector erase() iterator outside range
我在这一行收到错误 (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
i转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");
}
这是输入图片:
和错误图片:
当您擦除向量的元素时,向量会变小。由于您的循环将进入 N
,最终循环索引 k
变得比剩余向量大。
我在这一行收到错误 (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
i转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");
}
这是输入图片:
和错误图片:
当您擦除向量的元素时,向量会变小。由于您的循环将进入 N
,最终循环索引 k
变得比剩余向量大。