> 백엔드 개발 > C++ > C에서 반복하는 동안 벡터에서 요소를 안전하게 제거하는 방법은 무엇입니까?

C에서 반복하는 동안 벡터에서 요소를 안전하게 제거하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-04 04:09:13
원래의
183명이 탐색했습니다.

How to Safely Remove Elements from a Vector During Iteration in C  ?

루프 내의 벡터에서 요소 제거

벡터를 반복할 때 다음을 기반으로 요소를 제거해야 하는 시나리오가 있을 수 있습니다. 특정 기준. 그러나 반복하는 동안 벡터를 수정하려고 하면 런타임 오류가 발생할 수 있습니다.

다음 시나리오를 고려하세요.

1

2

3

4

5

6

for (vector<Player>::iterator it = allPlayers.begin(); it != allPlayers.end(); it++) {

  if (it->getpMoney() <= 0)

    it = allPlayers.erase(it);

  else

    ++it;

}

로그인 후 복사

이 코드는 돈이 0이거나 마이너스인 플레이어를 제거하려고 합니다. 그러나 할당 연산자와 관련된 오류로 인해 실패합니다. 이 문제를 해결하려면 루프 내에서 반복기를 증가시키지 마십시오. 대신, erasure() 함수에서 반환된 반복자를 사용하십시오.

1

2

3

4

5

6

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 관용구를 사용하세요.

1

2

3

4

5

6

7

8

allPlayers.erase(

  std::remove_if(

    allPlayers.begin(),

    allPlayers.end(),

    [](Player const &amp; p) { return p.getpMoney() <= 0; }

  ),

  allPlayers.end()

);

로그인 후 복사

이 관용구는 제거할 요소를 식별하기 위해 Remove_if() 알고리즘을 결합합니다. 필요한 범위를 제거하려면 지우기 및 지우기() 메서드를 사용하세요.

위 내용은 C에서 반복하는 동안 벡터에서 요소를 안전하게 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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