루프 내의 벡터에서 요소 제거
벡터를 반복할 때 다음을 기반으로 요소를 제거해야 하는 시나리오가 있을 수 있습니다. 특정 기준. 그러나 반복하는 동안 벡터를 수정하려고 하면 런타임 오류가 발생할 수 있습니다.
다음 시나리오를 고려하세요.
for (vector<Player>::iterator it = allPlayers.begin(); it != allPlayers.end(); it++) { if (it->getpMoney() <= 0) it = allPlayers.erase(it); else ++it; }
이 코드는 돈이 0이거나 마이너스인 플레이어를 제거하려고 합니다. 그러나 할당 연산자와 관련된 오류로 인해 실패합니다. 이 문제를 해결하려면 루프 내에서 반복기를 증가시키지 마십시오. 대신, erasure() 함수에서 반환된 반복자를 사용하십시오.
for (vector<Player>::iterator it = allPlayers.begin(); it != allPlayers.end(); /*it++*/) { if (it->getpMoney() <= 0) it = allPlayers.erase(it); else ++it; }
게다가, erasure() 함수에서 연산자=를 사용하려면 Player 클래스를 할당할 수 있어야 합니다. 즉, Player 클래스는 구현해야 합니다. 대입 연산자입니다.
벡터의 지우기-제거 관용어 조작
벡터에서 요소를 제거하는 작업을 단순화하려면 Erase-Remove 관용구를 사용하세요.
allPlayers.erase( std::remove_if( allPlayers.begin(), allPlayers.end(), [](Player const & p) { return p.getpMoney() <= 0; } ), allPlayers.end() );
이 관용구는 제거할 요소를 식별하기 위해 Remove_if() 알고리즘을 결합합니다. 필요한 범위를 제거하려면 지우기 및 지우기() 메서드를 사용하세요.
위 내용은 C에서 반복하는 동안 벡터에서 요소를 안전하게 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!