반응형
list
list
는 이중 연결 리스트를 구현한 컨테이너입니다.
주요 특징
- 이중 연결 리스트 : 각 노드는 이전 노드와 다음 노드에 대한 포인터를 가지고 있어, 양방향으로 탐색이 가능합니다.
- 다이나믹 크기 : 동적으로 크기가 조정되므로, 요소가 추가될 때 자동으로 메모리를 할당하거나 해제합니다.
- 비순차적 저장 : 메모리 내에서 요소가 불규칙하게 저장될 수 있어, 중간에 삽입하거나 삭제할 때 빠릅니다.
- 랜덤 액세스 없음 : 임의 접근이 불가능하므로, 인덱스를 통해 요소에 접근할 수 없습니다. 요소에 접근하려면 순차적으로 탐색해야 합니다.
선언
#include <list>
std::list< char > li;
// example
std::list< char > li1 = { 'a', 'b', 'c', 'd', 'e' }; // 크기가 5인 리스트, 초기값 등록
std::list< char > li2(10); // 크기가 10인 리스트, 기본값으로 초기화
std::list< char > li3(10, 'a'); // 크기가 10인 리스트, 모든 원소 'a'로 초기화
함수
Iterators
함수 | 설명 |
begin() |
첫번째 원소를 가리키는 iterator를 반환 |
end() |
마지막 원소의 다음을 가리키는 iterator를 반환 |
cbegin() |
첫번째 원소를 가리키는 상수 iterator를 반환 |
cend() |
마지막 원소의 다음을 가리키는 상수 iterator를 반환 |
rbegin() |
역 순차열의 첫 번째 원소를 가리키는 iterator를 반환 |
rend() |
역 순차열의 마지막 원소의 다음을 가리키는 iterator를 반환 |
crbegin() |
역 순차열의 첫 번째 원소를 가리키는 상수 iterator를 반환 |
crend() |
역 순차열의 마지막 원소의 다음을 가리키는 상수 iterator를 반환 |
기타 접근 또는 사용 관련
함수 | 설명 |
front() |
첫번째 원소의 값 |
back() |
마지막 원소의 값 |
empty() |
비어있다면 true, 아니라면 false 반환 |
size() |
크기 반환 |
push_front(T value) |
리스트 맨 앞에 원소 추가 |
push_back(T value) |
리스트 맨 뒤에 원소 추가 |
pop_front() |
리스트 맨 앞의 원소 삭제 |
pop_back() |
리스트 맨 뒤의 원소 삭제 |
insert(iterator it, T value) |
iterator가 가리키는 부분의 앞에 원소 추가 |
erase(iterator it1, [iterator it2]) |
원하는 위치, 범위의 원소 삭제 |
splice(iterator pos, list<T> li2) |
리스트 pos 위치에 li2 이동 |
splice(iterator pos, list<T> li2, iterator it) |
리스트 pos 위치에 li2의 it 이동 |
splice(iterator pos, list<T> li2, iterator first, iterator last) |
리스트 pos 위치에 li2의 (first, last) 구간 이동 |
사용 예시
#include <iostream>
#include <list>
using namespace std;
int main() {
// 리스트 선언
list<int> a;
// 원소 추가
a.push_back(22);
a.push_back(33);
a.push_front(11);
a.push_back(44);
a.push_back(55);
// 반복자 생성
list<int>::iterator iter = a.begin();
// 리스트 출력
for (iter = a.begin(); iter != a.end(); iter++)
cout << *iter << endl; // 원본 리스트: 11 22 33 44 55
cout << "" << endl;
cout << "" << endl;
// 원소 삭제
a.pop_front();
a.pop_back();
for (iter = a.begin(); iter != a.end(); iter++)
cout << *iter << endl; // 원소 삭제후 리스트: 22 33 44
cout << "" << endl;
// 리스트 사이즈 출력
cout << a.size() << endl; // 3 출력( 22, 33, 44 이므로)
// 리스트가 비어있는가
cout << a.empty() << endl; // 비어있지 않으므로 0 반환
// 리스트 첫번째 원소 출력
cout << a.front() << endl; // 22
// 리스트 마지막 원소 출력
cout << a.back() << endl; // 44
cout << "" << endl;
cout << "" << endl;
// 리스트 두번째, 세번째 위치에 원소 추가
a.insert(++a.begin(), 55555);
a.insert(next(a.begin(), 2), 11111);
for (iter = a.begin(); iter != a.end(); iter++)
cout << *iter << endl; // 22,55555,11111,33,44
cout << "" << endl;
cout << "" << endl;
// 리스트 중간에 다른 리스트 삽입 (splice)
list<int> b{ 9,9,9 };
a.splice(next(a.begin(), 3), b, b.begin(), --b.end());
for (auto x : a) cout << x << endl; // 22,55555,11111,9,9,33,44
cout << "" << endl;
for (auto x : b) cout << x << endl; // 9
}
반응형
'IT > Programming Language' 카테고리의 다른 글
[C++/STL] STL 사용법 : Container - Forward List (0) | 2025.02.23 |
---|---|
[C++/STL] STL 사용법 : Container - Deque (0) | 2025.02.23 |
[C++/STL] STL 사용법 : Container - Vector (0) | 2025.02.15 |
[C++/STL] STL 사용법 : Container - Array (0) | 2025.02.15 |
[Java] 어노테이션 (Annotation) (0) | 2025.02.09 |