을 삭제하는 동안 (unordered_set 같이) STL의 모든 요소를 통과하는 방법 : 그러니까 기본적으로내가 예제 코드를 작성했습니다 그들에게
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 중 하나)와 같은 것을 인쇄합니다.
하지만 실행 후 3과 세그먼테이션 오류가 발생했습니다. 요소를 지우는 동시에 반복기를 유효하게 유지할 수 있습니까?
나는 영어 실력을 향상시키고있다.
도움 주셔서 감사합니다.
'num '이 3 일 때'ite'는 가리키는 요소를 지웠기 때문에'auto tmp = ite; '에 도달했을 때 이미 무효화되어 있습니다 ... –