> 백엔드 개발 > C++ > C 11 범위 기반 For 루프 중에 벡터에서 요소를 제거할 수 있습니까?

C 11 범위 기반 For 루프 중에 벡터에서 요소를 제거할 수 있습니까?

Susan Sarandon
풀어 주다: 2024-12-02 13:07:12
원래의
155명이 탐색했습니다.

Can You Remove Elements from a Vector During a C  11 Range-based For Loop?

범위 기반 for 루프 내에서 벡터 요소 관리

C 11에서 범위 기반 for 루프는 컨테이너의 요소. 그러나 벡터에서 요소 제거와 같은 특정 작업은 이러한 루프 내에서 문제가 됩니다.

C 11 범위 기반 for 루프 중에 벡터에서 요소를 제거할 수 있습니까?

안타깝게도 그렇지 않습니다. 범위 기반 for 루프는 컨테이너의 각 요소를 일회성 반복하도록 설계되었습니다. 요소 제거를 포함하여 컨테이너 자체를 수정하는 데는 적합하지 않습니다.

요소 제거의 대안:

루프 내의 벡터에서 요소를 제거하려면 다음을 사용해야 합니다. 전통적인 for 루프 또는 그 변형. 이는 컨테이너의 수정 및 비선형 순회를 허용합니다.

예:

auto i = std::begin(inv);

while (i != std::end(inv)) {
    // Do some stuff
    if (blah)
        i = inv.erase(i);
    else
        ++i;
}
로그인 후 복사

std::begin 및 std::end 함수를 사용하여, 루프는 반복자를 사용하여 벡터를 반복합니다. 요소가 제거 대상으로 표시되면 삭제 함수가 호출되어 제거된 요소를 가리키는 반복자가 무효화됩니다. 그런 다음 반복기를 전진시켜 루프를 계속합니다.

결론적으로, 범위 기반 for 루프는 읽기 전용 반복에 사용하기 쉬운 반면, 벡터에서 요소를 제거하는 것과 같은 작업의 경우 기존 for 루프를 사용해야 합니다. 컨테이너 수정에 대한 통제력을 유지하세요.

위 내용은 C 11 범위 기반 For 루프 중에 벡터에서 요소를 제거할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿