我是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);
}
}
答案 0 :(得分:5)
你在for循环中删除了元素,指向被删除元素的迭代器(即if len(css(".Total", parent=new, nowait=True)) > 0:
)将失效。然后it
会导致问题。
你可以
it++
答案 1 :(得分:1)
您的迭代器会删除迭代器指向的元素。
当删除std::map
中的元素时,其所有迭代器都会立即失效。
删除元素后,迭代器不再有效。之后,for循环尝试增加不再有效的迭代器。这就是你的代码崩溃的原因。
典型的解决方案是这样的:
for(it = h.begin(); it !=h.end(); ){
{
std::map<int,int>::iterator p=it;
++it;
if (p->second > 4){
h.erase(p->first);
}
}
请注意,只有在迭代器已经递增后才会删除该元素。
答案 2 :(得分:0)
你正在吹掉迭代器。一旦从地图中删除元素,它就会变为无效。
此外,您可能希望将迭代器增量更改为++ it。可以提供一点速度提升。