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 중국어 웹사이트의 기타 관련 기사를 참조하세요!