반복 중 std::Vector에서 요소를 효율적으로 제거
질문:
기존 반복자를 무효화하지 않고 반복하면서 std::벡터에서 요소를 효율적으로 제거할 수 있는 방법은 무엇입니까? 다음 시나리오를 고려하십시오.
<code class="cpp">std::vector<std::string> m_vPaths; for (auto iter = m_vPaths.begin(); iter != m_vPaths.end(); iter++) { if (::DeleteFile(iter->c_str())) { m_vPaths.erase(iter); // Invalidates remaining iterators } }</code>
답변:
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); // Sets iter to next valid element else ++iter; }</code>
위 내용은 반복자를 무효화하지 않고 반복 중에 `std::벡터`에서 요소를 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!