这是什么意思 矢量擦除迭代器超出范围 是指超出索引了嘛?
下面是代码
#include<iostream>
#include<vector>
#include <unordered_map>
#include<istream>
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;
}