List
list는 연결-리스트를 구현하는 컨테이너다.
배열, vector와 달리 랜덤 접근이 불가하고 순차적으로 접근해야 한다.
예시
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <list>
int main() {
std:list<int> ls; // 선언
ls.push_back(1);
ls.push_back(2);
ls.push_front(0);
}
필요 헤더
1
#include <list>
선언
std::list<자료형>
1
2
3
4
5
6
7
8
9
10
11
12
13
// 비어있는 list 생성
list<int> ls;
// 크기 10의 기본값을 초기화된 상태로 생성
// int, char 등 기본 자료형의 경우 0, 클래스의 경우 기본 생성된 객체로 채워짐
list<int> ls(10);
// 크기 10의 5로 초기화된 상태로 생성
list<int> ls(10, 5);
// src의 원소를 복사해 dst를 생성
list<int> src(10, 5);
list<int> sdt(src);
원소 추가 & 삭제
std::list::push_front()
std::list::push_back()
std::list::pop_front()
std::list::pop_back()
리스트의 앞/뒤에 원소를 추가/삭제 한다.
1
2
3
4
5
6
7
8
9
10
11
// 3을 리스트의 처음에 추가
vec.push_back(3);
// 5를 리스트의 끝에 추가
vec.push_back(5);
// 리스트의 첫 원소 제거
vec.pop_front();
// 리스트의 마지막 원소 제거
vec.pop_back();
원소 가져오기
std::vector::front()
std::vector::back()
1
2
3
4
5
// 리스트의 처음 원소를 리턴
value = vec.front();
// 리스트의 마지막 원소를 리턴
value = vec.back();
list
는 랜덤접근이 불가능하다.
순차 접근
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// loop-range for문을 이용한 순차접근
for (int value : ls) {
cout << value << endl;
}
// 참조 변수로 받아오는 경우 값을 변경하면 리스트 내 원소의 값도 바뀐다.
for (int& value : ls) {
cout << value << endl;
}
// 고전적인 iterate 방법
list<int>::iterator iter;
for(iter = ls.begin(); iter != ls.end(); iter++) {
cout << *iter << endl;
}
// 역방향으로 순회하는 방법
list<int>::reverse_iterator riter;
for(riter = ls.rbegin(); riter != ls.rend(); riter++) {
cout << *riter << endl;
}
기타
std::list::size()
std::list::empty()
1
2
3
4
5
// 리스트 내 원소의 개수를 구한다
int size = ls.size();
// 리스트가 비어있는지 여부를 가져온다
bool is_empty = ls.empty();