"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 왜 `std::remove`는 C++에서 요소를 삭제하는 대신 요소를 재배열합니까?

왜 `std::remove`는 C++에서 요소를 삭제하는 대신 요소를 재배열합니까?

2024년 11월 19일에 게시됨
검색:500

  Why Does `std::remove` Rearrange Elements Instead of Deleting Them in C  ?

차이점 이해: 지우기 vs. 제거

C 프로그래밍 영역에서 std::erase와 std::remove는 두 가지입니다. 컨테이너 수정과 관련하여 다양한 목적을 제공하는 고유한 기능입니다. 두 함수 모두 컨테이너에서 요소를 제거하는 데 사용할 수 있지만 동작이 다릅니다.

Std::remove: 요소 재배열과 삭제

Std:: 제거는 다양한 요소에 대해 작동하고 컨테이너 내에서 요소를 재배열하는 알고리즘입니다. 요소를 직접 삭제하지는 않지만 일치하지 않는 요소를 일치하는 요소 위로 이동합니다. 이 프로세스는 시퀀스 시작 부분에 일치하는 요소의 클러스터를 생성하고 끝 부분에 일치하지 않는 요소의 클러스터를 생성합니다.

Std::erase: 요소 삭제

반면에 std::erase는 컨테이너에서 지정된 요소를 제거하여 크기를 효과적으로 줄이는 함수입니다. 다양한 반복기를 인수로 사용하고 제거하도록 표시된 요소를 포함하여 해당 범위 내의 모든 요소를 ​​삭제합니다.

출력 이해

제공된 코드 예제에서, 다음과 같은 관찰이 가능합니다:

  1. Std::remove: std::remove가 std::erase 없이 사용되면 벡터의 크기는 그대로 두고 단순히 요소를 재배열합니다. 변하지 않은. 따라서 벡터를 반복하면 2,2가 출력됩니다.
  2. Std::erase: std::erase가 std::remove와 함께 사용되면 제거됩니다. 일치하는 요소(이 경우 단일 발생 1)를 검색하고 그에 따라 벡터의 크기를 업데이트합니다. 결과적으로 출력에는 2.

Std::remove

  1. 지우기 이외의 사용-제거에 대한 추가 참고사항만 표시됩니다. 관용어: std::remove는 일반적으로 "erase-remove 관용구"의 일부로 지우기와 함께 사용되지만 독립적으로 사용될 수도 있습니다. 제거 순서가 중요하지 않고 기본 목표가 컨테이너 내에서 일치하는 요소와 일치하지 않는 요소를 분리하는 것인 시나리오에서 유용합니다.
  2. 비삭제에 대한 근거: std::remove 삭제를 포함하지 않는 것은 임의의 순방향 반복자와 함께 작동하는 능력에서 비롯됩니다. 이러한 반복자는 요소를 삭제하는 기능이 없을 수 있으므로 std::remove.
의 기능이 제한됩니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3