>백엔드 개발 >C++ >C에서 반복하는 동안 지도 요소를 지우면 어떻게 되나요?

C에서 반복하는 동안 지도 요소를 지우면 어떻게 되나요?

Linda Hamilton
Linda Hamilton원래의
2024-12-15 16:02:11995검색

What Happens When You Erase a Map Element During Iteration in C  ?

처음부터 끝까지 반복하는 동안 맵 요소에서 erasure()를 호출하면 어떻게 되나요?

C의 map에서는 반복하는 동안 요소를 지우는 동작을 고려하는 것이 중요합니다. 이 작업을 올바르게 처리하지 않으면 예상치 못한 결과가 발생할 수 있습니다.

C 11

C 11에서는 erame() 메서드가 개선되어 이제 일관됩니다. 모든 컨테이너 유형에 걸쳐 요소가 지워지면 eras() 메서드는 다음 반복자를 반환합니다. 이를 통해 문제 발생 없이 맵을 계속 반복할 수 있습니다.

다음 코드는 C 11에서 반복하는 동안 맵에서 요소를 지우는 올바른 방법을 보여줍니다.

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에서는 지도에서 요소를 삭제하는 동안 반복하면 반복자가 무효화될 수 있습니다. 이 문제를 방지하려면 eras() 작업 외부에서 증가하는 루프 변수를 사용하여 맵을 반복해야 합니다.

다음 코드는 C 03에서 반복하는 동안 맵에서 요소를 지우는 올바른 방법을 보여줍니다. :

map::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.
        // Increments the iterator but returns the
        // original value for use by erase
    } else {
        ++pm_it; // Can use pre-increment in this case
        // To make sure you have the efficient version
    }
}

위 내용은 C에서 반복하는 동안 지도 요소를 지우면 어떻게 되나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.