C에서 맵을 반복하고 요소를 지우면 문제가 발생할 수 있습니다. 반복자 유효성에 관한 것입니다. 동작은 사용된 C 버전에 따라 다릅니다.
C 11에서는 erasure() 메서드가 반복자를 반환하도록 향상되었습니다. 후속 요소에. 이는 프로세스를 단순화합니다.
auto pm_it = port_map.begin(); while(pm_it != port_map.end()) { if (pm_it->second == delete_this_id) { pm_it = port_map.erase(pm_it); } else { ++pm_it; } }
C 03에서는 맵에서 요소를 지워도 반복자가 자동으로 무효화되지 않습니다. 그러나 삭제된 요소를 가리키는 반복자는 유효하지 않게 됩니다. 반복기 유효성을 유지하려면 코드를 업데이트해야 합니다.
map<string, SerialdMsg::SerialFunction_t>::iterator pm_it = port_map.begin(); while(pm_it != port_map.end()) { if (pm_it->second == delete_this_id) { port_map.erase(pm_it++); // Use iterator. Note the post increment } else { ++pm_it; } }
여기서 후행 증가 연산자( )는 반환된 반복기가 올바른 요소를 가리키는지 확인하기 위해 erase() 호출에 사용됩니다.
위 내용은 C에서 반복하는 동안 맵 요소 제거의 의미는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!