std::Vector를 반복하고 삭제와 같이 벡터 크기를 수정해야 하는 작업을 수행하는 경우 요소를 사용하면 반복자를 무효화하는 문제가 발생할 수 있습니다. 이는 요소 제거에 사용되는 erasure() 메소드가 벡터의 크기를 변경하고 기존의 모든 반복자를 무효화하기 때문입니다.
이를 극복하기 위한 효율적인 솔루션은 반환 값을 사용하는 것입니다. 삭제된 요소 바로 다음 요소를 가리키는 새롭고 유효한 반복자를 제공하는 erasure() 메서드. 이를 통해 무효화된 반복기에 대해 걱정할 필요 없이 반복을 계속할 수 있습니다.
다음 코드는 이 접근 방식을 보여줍니다.
<code class="cpp">std::vector<std::string>::iterator iter; for (iter = m_vPaths.begin(); iter != m_vPaths.end(); ) { if (::DeleteFile(iter->c_str())) { iter = m_vPaths.erase(iter); // Returns a new valid iterator } else { ++iter; // Advance iterator if file deletion failed } }</code>
이 코드에서 iter 반복자는 다음을 가리키도록 업데이트됩니다. 각 성공적인 파일 삭제 후 다음 요소를 사용하여 반복이 원활하게 진행될 수 있도록 합니다.
반복자 접근 방식을 사용하는 것이 효율적이기는 하지만 여전히 원본 m_vPaths 벡터를 수정하므로 성능이 향상될 수 있습니다. 여러 번 삭제해야 하는 경우 영향을 미칩니다. 이러한 경우 다음과 같이 요소를 효율적으로 삭제하는 데 최적화된 대체 데이터 구조를 사용하는 것이 더 나을 수 있습니다.
위 내용은 반복 중에 std::Vector에서 요소를 효율적으로 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!