서비 님이 쓰신 글 :
: vector를 쓰다가 안되겠다싶어
:
: list를 쓰고 있는데요
list란 doubly linked list(이중 연결 리스트)로 구현되어 있습니다.
자세한 것은 자료구조 책을 참고하세요.
STL을 제대로 쓰려면 자료구조에 대한 이해가 선행되어야 합니다.
: 중간에 데이터를 삭제시 Index값이 다 땡겨지나요? 아님 NULL값으로 남나요?
list에는 vector나 deque과는 달리 index가 없습니다.
즉, index에 의한 random access가 불가능합니다.
반복자를 써서 무조건 처음(begin)부터 하나씩 검색해야 합니다.
그리고 vector, deque의 중간에 있는 데이터를 삭제하면
NULL로 남는 것이 아니라, 전부다 앞으로 당겨집니다(복사).
그러므로 vector나 deque에서는 선형 시간(O(N))이 걸리므로,
중간에 있는 데이터를 자주 삭제해야 한다면, list를 쓰세요.
list는 중간에 있는 데이터를 삭제해도 전부 앞으로 당길 필요없이
포인터만 조정하면되므로 항상 상수 시간(O(1))이 걸리는 장점이 있습니다.
: 삭제시에는 어떤걸 쓰나요
:
: erase를 쓰나요 아님 remove를 쓰나요..
시퀀스 컨테이너의 erase 멤버 함수는 반복자가 가리키는 특정 위치나,
범위에 있는 원소를 삭제하고요,
list의 remove 멤버 함수는 특정한 값(value)을 가진 모든 원소를 삭제합니다.
용도가 다르죠.
그리고, set과 map과 같은 연관 컨테이너에서는 erase 멤버함수가 위의 두가지 기능을 전부 가지고 있습니다. 혼동하지 마세요.
: 글구 데이터 삭제할때 메모리는 줄어드나요?
list에서는 삭제하면 실제로 메모리가 줄어들지만,
vector와 deque은 아닙니다.
실제로 메모리를 줄어들게 하려면, 아주 간단한 꽁수(?)를 사용하면 됩니다.
제가 쓴 다음 글을 참고하세요.
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=21732