1406. 에디터 / erase

·2021년 8월 19일

백준 알고리즘

목록 보기
234/341

1. erase

정의

: 컨테이너의 값을 지우고, 뒤에 있는 컨테이너들을 제거한곳으로
이동해서 채워준다.
-> 사이즈도 줄어든다.

: 그리고 사용된 이터레이터는 손실되면, 제거된 이터레이터가 아닌 다음 이터레이터를 반환한다.

🤡사용법

  • 이터레이터를 넘겨야 함!!!
    1. 몇번째 인덱스에 있는 값을 제거하기
      : erase(v.begin + indexNum)
  1. begin ~ end까지 싹 다 제거하기

사용방법과 문제점

https://velog.io/@kwt0124/vector#12-push_back-vs-emplace_back
erase 사용법 참고

2. remove

정의

원소를 실제로 제거하지 않고, 다음 원소로 덮어쓰는 방식이다.

  • 컨테이너 제거가 이루어지지 않으므로, size는 축소하지 않는다.

오버로딩


-> 그림을 보면 알수있겠지만, 컨테이너의 멤버 함수가 아니라는 것을 확인할 수 있다.

사용방법과 문제점

https://velog.io/@kwt0124/vector#12-push_back-vs-emplace_back
remove 사용법 참고

3. erase vs remove

erase의 경우에는 컨테이너의 삭제가 이루어지고, 다음 원소들이 지워진 컨테이너들로 이동해서 채워지는 방식으로, 사이즈가 줄어들지만,
remove의 경우에는 컨테이너의 삭제가 이루어지지 않고,
다음 원소들이 지워지는 컨테이너들로 move와 copy가 이루어 진다.
따라서 size의 변동은 없다.

erase의 특징

  • erase의 특징
    erase의 문제점으로는 이터레이터로 제거를 하면 컨테이너가 지워짐과 동시에
    이터레이터도 손실되며, 다음 이터레이터값을 반환하게 된다.
    이 점에 유의해 사용해야 한다.
  • erase와 remove의 조합을 이요하면
    : 시간복잡도는 O(n)이고, size도 줄일 수 있어서 좋은 방법이다.

list 문제에서 자주 나오는 erase 사용하기

  • 위의 erase 의 특징 으로 인해 반환하는 이터레이터를 반드시 다른 이터레이터로 받는 동작을 해야 한다.
    그렇지 않으면 기존에 erase 할때 사용한 이터레이터 손실하기 때문에 다음 erase는 불가하다.

관련 문제

  • 백준 1406

: erase에 사용되는 cursor 이터레이터인데 다시 반환받아서 사용하는 것을 확인할 수 있다.

profile
🔥🔥🔥

0개의 댓글