삽입과 삭제
삽입, 삭제 함수도 벡터와 동일하다. 멤버 함수의 이름뿐만 아니라 원형까지 동일하며 사용 방법도 물론 똑같다.
iterator insert(iterator it, const T& x = T());
void insert(iterator it, size_type n, const T& x);
void insert(iterator it, const_iterator first, const_iterator last);
iterator erase(iterator it);
iterator erase(iterator first, iterator last);
다만 처리 속도는 벡터보다 훨씬 빠른데 위치와 요소 개수에 상관없이 상수 시간내에 삽입, 삭제된다. 속도가 빠르다는 것 외에도 반복자가 무효화되지 않는 장점도 있다. (단, 반복자가 가리키는 대상이 삭제되면 당연히 반복자는 무효화 된다.)
void remove(const Type& val);
void remove_if(UniPred F)
특정값을 가지는 요소를 모두 삭제하고 싶을 때는 다음 remove() 멤버 함수를 사용한다.
리스트에는 링크 재배치의 장점을 살릴 수 있는 여러 가지 멤버 함수들이 준비되어 있다.
void swap(list& Right);
void reverse( );
void merge(list& Right);
merge도 링크를 조작하여 한쪽 리스트를 다른 쪽의 끝과 연결하기만 하면 된다.
void splice(iterator it, list& x);
void splice(iterator it, list& x, iterator first);
void splice(iterator it, list& x, iterator first, iterator last);
첫 번째 원형은 it 위치에 x리스트의 모든 요소들을 이동시킨다. 마치 작은 새끼줄을 큰 새끼줄의 허리 부근에 연결하는 것과 같다. 복사가 아닌 이동이므로 x에 있던 요소들은 모두 제거된다. x는 호출하는 객체와는 당연히 달라야 하는데 자신을 자신에게 이을 수는 없는 노릇이다.
두 번째 원형은 x의 first위치에 있는 요소 하나만 it위치로 이동시킨다.
세 번째 원형은 하나의 요소가 아니라 반복자 구간을 지정하여 일정 범위의 요소를 한꺼번에 이동시킨다는 점이 다르다. 같은 리스트내에서의 이동도 가능하므로 이 두 원형은 x가 호출하는 객체 자신이어도 상관없다.
전체를 이동시키는 splice(it, x)는 전체 구간을 이동하는 splice(it, x.begin(),x.end())와 동일한 함수라고 할 수 있다.
리스트의 정렬
리스트는 임의 접근 반복자를 제공하지 않으므로 정렬 속도가 대단히 느린 편이다. 그래서 sort 알고리즘 함수를 사용하지 못하며 대신 sort 멤버 함수를 사용해야 한다. sort 알고리즘은 임의 접근을 활용하는 퀵 소트로 구현되어 있는데 비해 리스트의 sort 멤버 함수는 리스트에 좀 더 특화된 알고리즘으로 작성되어 있다. 두 개의 원형이 제공된다.
void sort();
void sort(BinPred op);
인수를 받지 않는 sort 멤버 함수는 < 연산자로 노드를 비교하여 정렬하며 조건자를 받아들이는 sort 멤버 함수는 조건자의 비교 결과대로 정렬한다.
다음 멤버 함수는 연속된 중복 요소를 제거하는데 같은 이름의 전역 함수도 있지만 멤버 함수는 리스트의 링크 구조를 활용하도록 구현되어 있다.
void unique();
void unique(UniPred op);
속력 비교