반복 중 맵에서 요소 제거
C에서는 지우기를 사용하여 요소를 제거하는 동안 표준 라이브러리 맵을 반복하는 것이 어려울 수 있습니다. ()는 반복자를 무효화합니다. 그러나 이 문제를 해결하기 위해 널리 사용되는 관용구가 있습니다.
for(auto it = m.begin(); it != m.cend() /* not hoisted */; /* no increment */) { if(must_delete) { auto next = it; it = m.erase(it); // or "it = m.erase(it)" since C++11 } else { ++it; } }
이 관용구의 작동 방식은 다음과 같습니다.
C 11 이전 구문:
C 11 이전에는 const 반복자를 삭제하는 데 약간의 시간이 필요했습니다. 다른 구문:
for (std::map<K,V>::iterator it = m.begin(); it != m.end(); ) { /* ... */ }
불변성 및 제거:
맵에서 요소를 삭제해도 상수에 대한 포인터를 삭제하는 것과 마찬가지로 요소의 불변성을 위반하지 않습니다. 일관성은 주로 수명이 아니라 값을 수정하는 능력을 제한합니다.
위 내용은 반복 중에 C 맵에서 요소를 안전하게 제거하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!