개요
특징
- vector와 deque와 같은 Sequence Container의 한 종류이다.
- 이중 연결 리스트라고 잘 알려져 있는 자료구조를 구현해놓은 컨테이너이다.
- 다른 Sequence Contianer와 달리 멤버 함수로 sort()와 merge() 그리고 splice()가 있다.
- 이중 연결 리스트 자료구조의 특성상 노드 기반 컨테이너이므로 임의 접근이 불가능하다. (a[3], a.at(3))
- 중간에 원소를 삽입(insert), 제거(erase)하는 작업은 O(1)의 시간 복잡도를 가진다.
- 값의 비교로 원소를 제거하는 remove()와 remove_if()를 제공한다.
자세히 알아보기
선수 항목
- #include <list>
- using namespace std;
선언
- std::list<Type> 이름;
- (using namespace std; 되어 있을 시) list<Type> 이름;
선언 - 생성자
- list lt;
빈 list 컨테이너 선언
- list lt(5);
원소가 5개이고, 그 원소의 값이 0인 list 컨테이너 생성 (기본값)
- list lt(5, 3);
원소가 5개이고, 그 원소의 값이 3인 list 컨테이너 생성
- list lt(lt_2);
list<Type> lt_2 컨테이너를 list<Type> lt에 복사
- list lt(iterator first, iterator last);
이터레이터 구간 [first, last)의 원소로 초기화된 컨테이너 생성
멤버 함수
::iterator
- begin() : 맨 앞의 원소를 가리키는 iterator 리턴
- end() : 맨 뒤의 다음 원소를 가리키는 iterator 리턴
- rbegin() : 맨 뒤의 원소를 가리키는 iterator 리턴, 기본 iterator와 다르게 뒤에서부터 순차적으로 접근할 때 사용
- rend() : 맨 앞 이전 원소를 가리키는 iterator 리턴
추가
- push_back(element) : list 맨 뒤에 element 추가
- push_front(element) : list 맨 앞에 element 추가
- insert(iterator, element) : list의 iterator가 가리키는 위치 앞에 element 추가
삭제
- pop_back() : list 맨 뒤의 element 삭제
- pop_front() : list 맨 앞의 element 삭제
- erase(iterator), erase(iterator a, iterator b) : iterator가 가리키는 위치 / iterator a 부터 b 앞까지의 범위 삭제
- remove(value) : value와 같은 값을 가지는 element를 모두 제거
- remove_if(pred) : pred(조건자)가 참인 모든 원소를 제거한다.
접근
- *(iterator)
- front() : 첫 번째 원소를 반환
- back() : 마지막 원소를 반환
기타
- size() : list의 element 개수 리턴
- empty() : list가 비었으면 true 아니면 false 리턴
- reverse() : 원소를 뒤집음
- sort() : 모든 원소를 오름차순으로 정렬, 매개변수로 다른 compare 함수가 오면 정렬 기준 임의로 지정 가능
- unique() : 자기 자신과 다음에 있는 노드가동일하면 한 개만 남기고 삭제
- lt.merge(lt2) : list형 lt를 lt2에 합병 정렬
- lt.swap(lt2) : lt와 lt2를 swap
예시