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

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

Barbara Streisand
Barbara Streisand원래의
2024-12-06 01:32:09856검색

Can We Remove Elements from a Vector Inside a C  11 Range-Based For Loop?

C 11 범위 기반 루프의 벡터에서 요소 제거

C 11에서 범위 기반 for 루프는 편리한 반복 방법을 제공합니다. 컨테이너 요소를 통해 그러나 이러한 루프 내의 컨테이너에서 요소를 제거하는 것은 어려운 일입니다.

다음 코드를 고려하세요.

std::vector<IInventory*> inv;
inv.push_back(new Foo());
inv.push_back(new Bar());

for (IInventory* index : inv) {
    // Do some stuff
    // I need to remove this object from 'inv'...
}

범위 기반 루프 내에서 요소를 제거할 수 있나요?

아니요, 범위 기반 for 루프 내의 벡터에서 요소를 제거할 수 없습니다. 이는 요소가 제거되거나 추가되면 무효화되는 벡터 반복자의 복사본을 생성하여 루프가 작동하기 때문입니다.

따라서 반복 중에 컨테이너를 수정하기 위한 대체 접근 방식을 고려하는 것이 중요합니다.

권장 솔루션

권장되는 접근 방식은 전통적인 for 루프나 그 변형 중 하나를 사용하는 것입니다. 이를 통해 벡터를 직접 조작하고 필요에 따라 요소를 제거할 수 있습니다. 예:

auto i = std::begin(inv);

while (i != std::end(inv)) {
    // Do some stuff
    if (blah)
        i = inv.erase(i);
    else
        ++i;
}

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.