맵에서 반복 제거: 반복자 보존
맵 반복에서 요소를 제거하면 반복자가 무효화될 수 있으므로 까다로운 작업이 될 수 있습니다. 이를 방지하기 위해 프로그래머는 반복기 유효성을 보존하는 솔루션을 찾는 경우가 많습니다.
이 문제에 대한 표준 솔루션은 연관 컨테이너 삭제 관용어입니다.
for (auto it = m.cbegin(); it != m.cend() /* not hoisted */; /* no increment */) { if (must_delete) { m.erase(it++); // or "it = m.erase(it)" since C++11 } else { ++it; } }
결정적으로, 일반 for 루프는 다음과 같아야 합니다. 여기서는 컨테이너가 수정되기 때문에 RBFL(범위 기반 for 루프) 대신 사용되었습니다. 일반적인 for 루프에서는 반복자가 명시적으로 증가되어 반복 프로세스를 제어할 수 있습니다. 요소를 자동으로 반복하는 RBFL은 반복 메커니즘을 숨기고 정의되지 않은 동작으로 이어질 수 있습니다.
C 11 이전 구현의 경우 구문이 약간 다릅니다.
for (std::map<K,V>::iterator it = m.begin(); it != m.end(); ) { /* ... */ }
여기서 const 반복자는 지울 수 없습니다. 따라서 삭제를 수용하는 전용 반복자를 사용해야 합니다.
위 내용은 반복자 유효성을 유지하면서 C 맵에서 요소를 안전하게 제거하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!