- 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 |