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 // ... }
루프 내부에서 벡터 inv의 특정 요소를 제거해야 한다는 것을 알게 되었습니다. 그러나 두 가지 문제가 발생합니다.
솔루션
범위 기반 for 루프는 컨테이너의 각 요소에 한 번만 액세스해야 하는 상황을 위해 고안되었습니다. 반복 중에 요소를 수정하거나 제거해야 하는 경우 기존 for 루프나 반복자 기반 변형 중 하나를 사용해야 합니다.
반복기 증분 관리 기능이 있는 기존 for 루프를 사용하여 코드를 수정하는 방법은 다음과 같습니다.
for (auto i = inv.begin(); i != inv.end(); /*++i*/) { // Do stuff if (should_remove) { i = inv.erase(i); } else { ++i; } }
반복기 증분을 명시적으로 관리함으로써 루프의 유효성을 유지하고 어떤 문제도 발생하지 않고 요소를 제거하고 수정할 수 있는지 확인합니다. 오류가 발생했습니다.
위 내용은 C 11에서 반복하는 동안 벡터에서 요소를 안전하게 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!