C std::List
C에서 std::list는 이중 연결 목록 데이터를 제공하는 컨테이너입니다. 구조. 목록을 반복하는 동안 특정 조건에 따라 요소를 제거해야 할 수 있습니다. 이 문제는 반복 루프 내에서 항목을 직접 제거하면 "목록 반복자는 증분할 수 없음" 오류가 발생할 때 발생합니다.
이 문제를 해결하려면 이전 요소를 제거하기 전에 먼저 반복자(i )를 증가시키는 것이 중요합니다. 이는 다음과 같이 while 루프를 활용하여 달성할 수 있습니다.
std::list<item*>::iterator i = items.begin(); while (i != items.end()) { bool isActive = (*i)->update(); if (!isActive) { items.erase(i++); // alternatively, i = items.erase(i); } else { other_code_involving(*i); ++i; } }
이 수정된 코드에서는 반복자 i가 루프 내에서 증가되어 items.erase(i ) 작업이 이전 요소를 성공적으로 제거할 수 있습니다. . 또는 동일한 효과를 위해 i = items.erase(i)로 대체할 수 있습니다.
이 접근 방식을 구현하면 원하는 조건이 만족되는 즉시 항목을 효율적으로 제거할 수 있으므로 추가 패스가 필요하지 않습니다. 목록을 통해
위 내용은 반복하는 동안 C std::list에서 요소를 안전하게 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!