C++/STL 컨테이너

STL 컨테이너 - list

coding-potato 2025. 1. 7. 18:13

list

**이중 연결 리스트(doubly linked list)**로 구현된 STL 컨테이너입니다. 요소의 삽입, 삭제가 빠르며 순차적인 데이터 처리에 적합합니다.

list의 특징

  1. 이중 연결 리스트 기반:
    • 각 노드가 이전과 다음 노드에 대한 포인터를 포함.
    • 양방향으로 순회 가능.
  2. 삽입/삭제 속도:
    • 리스트의 임의 위치에서 요소를 삽입/삭제하는 작업이 O(1).
    • 단, 특정 위치를 찾는 작업(탐색)은 O(n).
  3. 연속적인 메모리를 사용하지 않음:
    • 메모리가 단편화될 수 있지만, 크기 조정 시 전체 이동이 필요하지 않음.
  4. 임의 접근(Random Access) 불가능:
    • 배열이나 std::vector처럼 인덱스로 접근할 수 없으며, 순차적으로 탐색해야 함.

사용법

1. #include <list>

  • std::list를 사용하려면 반드시 헤더 파일을 포함해야 함

2. 선언 및 초기화

3. 주요 멤버 함수

std::list는 다양한 메서드를 제공하여 리스트를 조작할 수 있습니다. 주요 함수는 다음과 같습니다.

기능 설명
삽입/삭제  
push_back(val) 리스트의 끝에 요소를 추가.
push_front(val) 리스트의 앞에 요소를 추가.
pop_back() 리스트의 끝 요소를 제거.
pop_front() 리스트의 앞 요소를 제거.
insert(it, val) 지정된 iterator 위치에 요소를 삽입.
erase(it) 지정된 iterator 위치의 요소를 제거.
clear() 리스트의 모든 요소를 제거.
resize(n, val) 리스트의 크기를 n으로 변경. (필요 시 val로 초기화)
emplace(it, val) 지정된 위치에 요소를 생성하여 삽입 (생성자 호출 포함).
emplace_back(val) 리스트 끝에 요소를 생성하여 삽입.
emplace_front(val) 리스트 앞에 요소를 생성하여 삽입.
remove(val) 리스트에서 특정 값을 가진 모든 요소를 제거.
접근 및 탐색  
front() 첫 번째 요소를 반환.
back() 마지막 요소를 반환.
begin() 리스트의 첫 번째 요소를 가리키는 iterator 반환.
end() 리스트의 마지막 다음 요소(iterator) 반환.
rbegin() 리스트의 끝부터 역순으로 순회하는 iterator 반환.
rend() 리스트의 첫 번째 이전 요소(iterator) 반환.
리스트 관리  
size() 리스트의 현재 크기를 반환.
empty() 리스트가 비어 있으면 true, 아니면 false 반환.
swap(other) 다른 리스트와 현재 리스트의 내용을 교환.
splice(it, other) 다른 리스트 other의 내용을 현재 리스트에 삽입.
merge(other) 두 리스트를 합치고 정렬.
sort() 리스트의 요소를 정렬.
reverse() 리스트의 요소를 역순으로 정렬.
unique() 중복된 요소를 제거.

'C++ > STL 컨테이너' 카테고리의 다른 글

STL 컨테이너 - queue  (0) 2025.01.07
STL 컨테이너 - stack  (0) 2025.01.07
STL 컨테이너 - vector  (0) 2025.01.07
STL 컨테이너 - array  (0) 2025.01.07
STL 컨테이너 - map  (0) 2024.11.25