gpt4 book ai didi

C++ - 为什么程序在映射迭代器中使用 if 语句崩溃?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:35:09 24 4
gpt4 key购买 nike

我是 C++ 的新手,我试图在传递 if 语句的同时遍历映射。但是程序崩溃了。

请帮我修复程序。

#include <bits/stdc++.h>
#include <iostream>
#include <set>
#include <string>
#include <iterator>

using namespace std;

int main()
{
std::map<int,int> h;
std::map<int,int>::iterator it;

h[1] = 2;
h[4] = 5;
for(it = h.begin(); it !=h.end(); it++){
if (it->second > 4){
h.erase(it->first);
}
}

最佳答案

您正在删除 for 循环内的元素,指向已删除元素(即 it)的迭代器将失效。那么it++就会出问题。

你可以

for (it = h.begin(); it != h.end(); ) {
if (it->second > 4){
it = h.erase(it); // set it to iterator following the last removed element
} else {
++it;
}
}

关于C++ - 为什么程序在映射迭代器中使用 if 语句崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36758349/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com