"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 반복하는 동안 std::Vector에서 요소를 안전하게 제거하는 방법은 무엇입니까?

반복하는 동안 std::Vector에서 요소를 안전하게 제거하는 방법은 무엇입니까?

2024년 11월 14일에 게시됨
검색:599

How to Safely Remove Elements from a std::vector While Iterating?

반복하는 동안 std::Vector에서 요소를 효율적으로 제거하기

C 프로그래밍 영역에서 개발자는 종종 std를 조작해야 하는 어려움에 직면합니다. ::벡터의 요소를 순회하는 동안. 반복자는 이 작업에 편리한 메커니즘을 제공하지만 반복 중에 요소를 제거하려고 할 때 일반적인 함정이 발생합니다.

std::Vector<:string>을 사용하여 목록을 저장하는 시나리오를 고려하십시오. 파일 경로. 목표는 각 파일을 삭제하고 벡터에서 해당 경로를 제거하는 것입니다. 그러나 eras() 메서드와 같은 기존 메서드를 사용하면 각 삭제 후 반복자가 무효화되어 추가 순회가 복잡해집니다.

이러한 제한을 극복하기 위해 개발자는 보다 효율적인 접근 방식을 고안했습니다. erasure() 메소드가 호출되면 지정된 요소를 제거할 뿐만 아니라 다음 요소를 가리키는 새 반복자를 반환합니다. 이 고유한 동작을 통해 루프를 원활하게 계속할 수 있습니다.

std::vector<:string>::iterator iter;
for (iter = m_vPaths.begin(); iter != m_vPaths.end(); ) {
    if (::DeleteFile(iter->c_str()))
        iter = m_vPaths.erase(iter);
    else
          iter;
}

이 코드 조각에서 루프는 의도한 대로 계속되며 각 삭제 후 다음 유효한 요소를 가리키도록 iter가 자동으로 업데이트됩니다. 이 효율적인 방법을 사용하면 추가 벡터가 필요하지 않으며 반복하는 동안 요소를 제거하는 프로세스가 간소화됩니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3