躺平77 2022-11-09 20:15 采纳率: 60%
浏览 6
已结题

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

img


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


#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;
}
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-11-09 22:27
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月25日
  • 已采纳回答 9月17日
  • 创建了问题 11月9日

悬赏问题

  • ¥15 matlab数据降噪处理,提高数据的可信度,确保峰值信号的不损失?
  • ¥15 怎么看我在bios每次修改的日志
  • ¥15 python+mysql图书管理系统
  • ¥15 Questasim Error: (vcom-13)
  • ¥15 船舶旋回实验matlab
  • ¥30 SQL 数组,游标,递归覆盖原值
  • ¥15 为什么我的数据接收的那么慢呀有没有完整的 hal 库并 代码呀有的话能不能发我一份并且我用 printf 函数显示处理之后的数据,用 debug 就不能运行了呢
  • ¥20 gitlab 中文路径,无法下载
  • ¥15 用动态规划算法均分纸牌
  • ¥30 udp socket,bind 0.0.0.0 ,如何自动选取用户访问的服务器IP来回复数据