[STL] 4. list

[STL] 4. list

Tags
STL

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 전용이며 정렬을 요구하지 않는다는 특징이 있다.