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

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

Patricia Arquette
풀어 주다: 2024-12-16 15:24:11
원래의
290명이 탐색했습니다.

What Happens When Erasing a Map Element During Iteration in C  ?

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

C 03에서, 맵에서 요소를 지우면 해당 요소를 가리키는 반복자가 무효화됩니다. 그러나 C 11 이상에서는 삭제 메서드가 다음 반복자를 반환하므로 요소 제거 후 안전한 반복이 가능합니다.

C 03>

C의 경우 03, 맵에서 요소를 제거한 후 안전한 반복을 보장하려면 map::erase()에서 반환된 반복자를 사용하도록 코드를 업데이트하고 다음을 수행하세요. erasure()를 호출한 후 반복자에 대한 사후 증가.

map<string, SerialdMsg::SerialFunction_t>::iterator pm_it = port_map.begin();<br>while(pm_it != port_map.end())<br>{</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">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 11 이상용 솔루션

C 11 이상에서는 erasure()가 다음 반복자를 반환합니다. 다음 구문을 사용하여 요소를 동시에 반복하고 제거하는 것이 안전합니다.

<br>auto pm_it = port_map.begin();<br>while(pm_it != port_map.end())<br>{</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">if (pm_it->second == delete_this_id)
{
    pm_it = port_map.erase(pm_it);
}
else
{
    ++pm_it;
}
로그인 후 복사

}

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

원천:php.cn
이전 기사:CAS만 사용하여 C 11에서 ABA 카운터를 어떻게 구현할 수 있습니까? 다음 기사:캡슐화를 위해 C에서 `friend` 키워드를 언제 사용해야 합니까?
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
최신 이슈
관련 주제
더>
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿