list
- std::list는 STL에서 제공하는 연관 컨테이너 중 하나로, 이중 연결 리스트로 구현되어있다.
- 각 원소는 노드로 구성되며, 이전 노드와 다음 노드를 가리키는 포인터를 가진다.
- 삽입 삭제 시 포인터만 변경하면 되므로 효율적이다. O(1)
- 사용 시 <list> 헤더를 추가해야 한다.
생성
list<int> l;
멤버 함수
자주 사용되는 멤버 함수를 정리했다. 자세한 내용은 아래 사이트에서 볼 수 있다.
접근
list<list> l; list<int>::iterator it1 = l.begin(); list<int>::iterator it2 = l.end();
컨테이너이므로 이터레이터를 통해 접근이 가능하다.
삽입
// 리스트의 맨 뒤에 요소를 추가 l.push_back(value); // 리스트의 맨 앞에 요소를 추가 l.push_front(value); // 리스트의 특정 위치에 요소를 삽입 l.insert(iterator, value); // 리스트의 특정 위치에 요소를 생성하고 추가 l.emplace(iterator, 10, "str"); // 리스트의 맨 뒤에 요소를 생성하고 추가 l.emplace_back(10, "str"); // 리스트의 맨 앞에 요소를 생성하고 추가 l.emplace_front(10, "str");
삽입 비교
ㅤ | push_back/front | insert | emplace |
삽입 위치 | 리스트의 끝/앞에 추가 | 리스트의 특정 위치에 추가 | 리스트의 특정 위치에 추가 |
동작 방식 | 복사 또는 이동 | 복사 또는 이동 | 복사나 이동이 없음 |
삭제
// 리스트의 맨 뒤 요소를 삭제 l.pop_back(); // 리스트의 맨 앞 요소를 삭제 l.pop_front(); // 리스트의 특정 위치 또는 범위의 요소를 삭제, 제거된 요소의 다음 위치 반환 l.erase(iterator); l.erase(iterator, iterator);
확인
// 리스트가 비어있는지 확인, 비어있으면 true l.empty(); // 리스트의 맨 뒤 요소를 반환 l.back(); // 리스트의 맨 앞 요소를 반환 l.front(); // 리스트의 크기를 반환 l.size();
조정
// 두 리스트를 교환 l.swap(); // 요소들을 오름차순으로 정렬 l.sort(); // 요소들을 기준에 맞게 정렬 l.sort(comp) // 중복된 요소들을 제거하고 반환 l.unique();
sort
list는 내부적으로 sort 함수를 가지고 있다. 이는 list의 양방향 특징 때문인데, 이 때문에 std::sort를 사용할 수 없고 전용 sort 멤버함수만 사용 가능하다.
unique
list는 내부적으로 unique 멤버 함수를 가지고 있는데, 이는 list 전용이며 정렬을 요구하지 않는다는 특징이 있다.