c++矢量擦除迭代器超出范围 是指超出索引了嘛?

img


这是什么意思 矢量擦除迭代器超出范围 是指超出索引了嘛?
下面是代码


#include
#include
#include 
#include
using namespace std;
char a[1000000];
unordered_map<char, int>hash = { {'A',1},{'B',2},{'C',3},{'D',4},{'E',5},{'F',6} };
char min_ch(vector<char>char_set) {
    int min_char = char_set[0];
    for (int i = 1;i < char_set.size();i++) {
        if (min_char > char_set[i])min_char = char_set[i];
    }
    return min_char;
}
bool issame(vector<int>&cur_index) {
    int n = cur_index.size();
    if (n == 1)return true;
    for (int i = 1;i < n;i++) {
        if (cur_index[0] != cur_index[i])return false;
    }
    return true;
}
void select(vector<int>& init_index, vector<int>& cur_index, vector<char>&char_set, int len) {
    unordered_map<char, int>hash = { {'A',1},{'B',2},{'C',3},{'D',4},{'E',5},{'F',6} };
    vector<int>next_index;
    int n = cur_index.size();
    char_set.clear();
    for (int i = 0;i < n;i++) {
        int index = (hash[a[cur_index[i]]] + cur_index[i]) % len;
        char_set.push_back(a[index]);
        next_index.push_back(index);
    }
    char min_char = min_ch(char_set);


//应该是这儿报错           这应该是正常删除把为什么会报错
    for (int i = 0;i < init_index.size();i++) {
        if (char_set[i] != min_char) {
            char_set.erase(char_set.begin() + i);
            init_index.erase(init_index.begin()+i);
            next_index.erase(next_index.begin()+i);
            i--;
        }
    }

    if (issame(next_index) == false)select(init_index, next_index, char_set, len);
    return;
}
bool same(char a[1000000]) {
    for (int i = 1;i < strlen(a);i++) {
        if (a[i] != a[0])return false;
    }
    return true;
}
int main() {
    cin.getline(a, 1000000);
    int len = strlen(a);
    if (same(a)) {
        cout << 0;
        return 0;
    }
    vector<int>init_index;
    vector<int>cur_index;
    vector<char>char_set;
    char min_char = a[0];
    for (int i = 0;i < len;i++) {
        if (min_char > a[i])min_char = a[i];
    }
    for (int i = 0;i < len;i++) {
        if (a[i] == min_char) {
            cur_index.push_back(i);
            init_index.push_back(i);
            char_set.push_back(a[i]);
        }
    }
    init_index.erase(init_index.begin());
    select(init_index, cur_index, char_set, len);
    int ans = init_index[0];
    cout << ans;
    return 0;
}