list 컨테이너는 대표적인 자료구조 중 하나인 '연결 리스트'라고 생각하시면 됩니다. 다만, STL에서 제공하는 'list 컨테이너'는 '이중 연결 리스트'로 구현되어 있습니다. 컨테이너의 내부는 다음과 같습니다.

 

'list 컨테이너'의 주요 인터페이스를 정리해보겠습니다. 앞서 vector 컨테이너의 인터페이스와 유사한 인터페이스도 많지만, 'list 컨테이너'만의 특징적인 인터페이스도 많습니다.

생성자(Constructor)
list lt lt는 빈 컨테이너입니다.
list lt{ n } lt는 기본값으로 초기화된 n개의 원소를 갖습니다.
list lt{ n, x } lt는 x값으로 초기화된 n개의 원소를 갖습니다.
list lt{ lt2 } lt는 lt2 컨테이너의 복사본입니다.(복사 생성자 호출)
list lt{ b, e } lt는 반복자 구간 [b, e)로 초기화된 원소를 갖습니다.
멤버 함수
lt.assign(n, x) lt에 x값으로 n개의 원소를 할당합니다.
lt.assign(b, e) lt에 반복자 구간 [b, e)로 할당합니다.
lt.front() lt의 첫 번째 원소를 참조합니다.
lt.back() lt의 마지막 원소를 참조합니다.
lt.begin() lt의 첫 번째 원소를 가리키는 반복자를 반환합니다.
lt.end() lt의 마지막 원소의 다음을 가리키는 반복자를 반환합니다.
lt.clear() lt의 모든 원소를 제거합니다.
lt.empty() lt가 비었는지 확인합니다.
lt.erase(p) p가 가리키는 원소를 제거합니다.
lt.erase(b, e) 반복자 구간 [b, e)의 모든 원소를 제거합니다.
lt.insert(p, x) p가 가리키는 위치에 x값을 삽입합니다.
lt.insert(p, n, x) p가 가리키는 위치에 n개의 x값을 삽입합니다.
lt.insert(p, b, e) p가 가리키는 위치에 [b, e)의 원소를 삽입합니다.
lt.size() lt의 원소의 개수를 반환합니다.
lt.max_size() lt가 담을 수 있는 최대 원소의 개수를 반환합니다.
lt.push_back(x) lt의 끝 쪽에 x값을 추가합니다.
lt.pop_back() lt의 끝 쪽 원소를 제거합니다.
lt.push_front(x) lt의 앞 쪽에 x값을 추가합니다.
lt.pop_front() lt의 앞 쪽 원소를 제거합니다.
lt.merge(lt2) lt2를 lt로 합병 정렬합니다.(정렬 기준: 오름차순-less)
lt.merge(lt2, pred) 조건자를 기준으로 lt2를 lt로 합병 정렬합니다.
lt.sort() lt의 모든 원소를 오름차순(less)으로 정렬합니다.
lt.sort(pred) 조건자 기준으로 lt의 모든 원소를 정렬합니다.
lt.splice(p, lt2) p가 가리키는 위치에 lt2의 모든 원소를 잘라 붙입니다.
lt.splice(p, lt2, q) p가 가리키는 위치에 lt2의 q가 가리키는 원소를 잘라 붙입니다.
lt.splice(p, lt2, b, e) p가 가리키는 위치에 lt2의 순차열 [b, e)을 잘라 붙입니다.
lt.swap(lt2) lt와 lt2를 스왑합니다.

 

다음은 'list 컨테이너'의 간단한 사용 예제입니다.

#include <iostream>
#include <list>
using namespace std;

void main() {
    list<int> lt;
    
    lt.push_back(10); // 끝 쪽에 원소를 추가합니다.
    lt.push_back(20);
    lt.push_back(30);
    lt.push_back(40);
    lt.push_back(50);
    
    for (auto iter = lt.begin(); iter != lt.end(); ++iter)
        cout << *iter << endl;
        
    lt.push_front(60); // 앞 쪽에 원소를 추가합니다.
    lt.push_front(70);
    
    for (auto iter = lt.begin(); iter != lt.end(); ++iter)
        cout << *iter << endl;
        
    lt.sort(); // lt 컨테이너의 내부 리스트를 오름차순으로 정렬합니다.
}