我写了一个示例代码:
void eg(){
unordered_set<int> s;
s.insert(1);
s.insert(4);
s.insert(3);
s.insert(6);
auto ite = s.begin();
while(ite != s.end()){
int num = *ite;
cout << num << endl;
while(s.find(num+1) != s.end()){
s.erase(s.find(num));
num++;
}
while(s.find(num-1) != s.end()){
s.erase(s.find(num));
num--;
}
auto tmp = ite;
ite ++;
s.erase(tmp);
}
}
所以基本上它会创建一个集合并在其中添加{1,3,4,6}。它遍历集合并打印元素,打印后删除集合中的所有连续元素。
所以代码应该打印像1,x(3和4中的一个,因为另一个将被删除),6。
但是在我运行之后,它打印3并且分段错误。 如何擦除元素,同时保持迭代器有效?
我的英语水平提高了。
谢谢大家的帮助!
答案 0 :(得分:1)
答案 1 :(得分:1)
使用std::set::erase返回的迭代器。
jQuery(function($) {
$('.clickable-images').click(function() {
$('#imgretprd').attr('src',$(this).attr('src'));
});
});