본문 바로가기
programing/C++

erase()와 remove() 차이

by RedWiz 2016. 8. 4.


- erase()는 vector에도 있고 list에도 있음

- remove()는 list에만 있음



- vector<>::erase() : capacity는 그대로지만 size는 줄어듦 (뒤에 있던 데이터는 앞으로 당겨짐)

- list<>::erase()     : 요소가 없어지면서 할당 메모리도 해제됨

- list<>::remove()  : 요소가 없어지면서 할당 메모리도 해제됨



- vector가 remove()를 사용하려면 Algorithm에 있는 stl의 remove()를 사용해야함

list와 vector 모두 Algorithm의 remove를 사용하면 값은 사라지지만(객체 자체는 맨 뒤로 이동) 뒤의 데이터가 앞으로 당겨지기만 하고 그 이후 처리는 아무것도 안함, 요소의 갯수는 그대로

=> vector는 size가 그대로이고 list의 노드도 그대로


따라서 지우려면

vec.erase(

std::remove(vec.begin(), vec.end(), [value]) // remove 하면 지워진 위치(마지막 위치) iterator 반환

);

처럼 erase를 같이 사용하여야 한다.

'programing > C++' 카테고리의 다른 글

[Modern C++] range-based for (범위 기반 for문)  (0) 2016.08.16
[Modern C++] 람다 함수 & decltype  (0) 2016.08.16
임시객체  (0) 2016.08.02
INI 파일 함수  (0) 2015.06.09
Registry 자료형, 함수  (0) 2015.06.09