역방향 반복자를 사용하여 목록에서 요소 삭제
목록에서 요소를 제거하려는 시나리오가 발생할 수 있습니다. 역방향 반복자를 사용하여 나열하지만, eraser() 함수는 일반 반복자만 허용합니다. 역방향 반복자를 일반 반복자로 변환하는 것이 간단하지 않기 때문에 이는 어려울 수 있습니다.
해결책:
이 문제를 해결하는 열쇠는 관계를 이해하는 데 있습니다. 역방향 반복자와 기본 반복자 사이. C 표준에 따르면 역방향 반복자 i의 기본 반복자는 &*(i - 1)입니다. 즉, 기본 반복자를 얻으려면 i를 감소시킵니다.
예:
다음 코드 조각을 고려하세요.
for ( std::list< Cursor::Enum & >::reverse_iterator i = m_CursorStack.rbegin(); i != m_CursorStack.rend(); ++i ) { if ( *i == pCursor ) { m_CursorStack.erase( --(i.base()) ); break; } }
여기서 예를 들어 기본 반복자는 i.base()를 감소시켜 얻습니다. 이 기본 반복자를 erame() 함수에 전달하면 목록에서 원하는 요소를 성공적으로 제거할 수 있습니다.
C 11 솔루션:
C 11 이상 , 두 가지 추가 솔루션을 사용할 수 있습니다:
m_CursorStack.erase( std::next(i).base() );
이 솔루션은 변경되지 않은 반면 std::next()는 역방향 반복기를 한 단계 앞으로 이동하여 기본 반복기를 효과적으로 검색하는 데 사용됩니다. .
std::advance(i, 1); m_CursorStack.erase( i.base() );
이 솔루션에서 역방향 반복자는 std::advance()를 사용하여 한 위치 전진합니다. 이는 기본 반복자를 삭제하려는 요소와 효과적으로 정렬합니다.
어떤 솔루션을 선택하든 이러한 접근 방식은 역방향을 사용하여 목록에서 요소를 지우는 깨끗하고 간단한 방법을 제공합니다. 반복자.
위 내용은 C에서 역방향 반복자를 사용하여 목록에서 요소를 어떻게 지울 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!