상세 컨텐츠

본문 제목

[C++ STL] std::forward_list 개요

Study/Language

by Arq.Dev5igner 2022. 2. 25. 17:41

본문

std::forward_list 요약
std::list가 양방향(double linked list)이라면 std::forward_list는 단방향(single linked list)이다.
단방향 연결 리스트라 양방향인 std::list보다 메모리 사용량이나 처리 속도면에서 조금 유리하다.
double linked list가 필요하다면 std::list를, single linked list로도 충분하다면 std::forward_list를 사용한다.
 
※ std::forward_list 특징
- single linked list(단일 연결 리스트) 자료구조를 이용하여 만든 시퀀스 컨테이너다.
- 설계 디자인을 std::list에 맞춘다.(STL은 범용성을 지향하므로 다른 컨테이너들도 마찬가지다.)
- 속도와 사이즈, 즉 성능을 최우선으로 설계, 제작되었다.
- 다른 STL 컨테이너에 있는 size 함수를 제공하지 않는다.
- size는 다음과 같이 구한다. -> size_t size = std::distance( list.begin(), list.end() )
 
※ std::forward_list와 std::list
- std::list는 양방향으로 이동 가능하지만 std::forward_list는 한 방향으로만 이동할 수 있다.
- std::list보다 삽입/삭제 속도가 아주 약간 더 빠르다.
- 양방향인 std::list에 비해 메모리를 적게 사용한다. 각 요소 뿐만이 아닌, 컨테이너 자체 사이즈도 더 작다.
- 삽입과 삭제는 지정한 요소의 다음 요소에 한해서만 가능하다.(단방향이므로 당연하다)
- 구현의 복잡성과 성능 문제 때문에 std::list에서 제공하는 insert와 erase를 제공하지 않는다.

 

※ std::forward_list를 사용해야 하는 경우

- double linked list가 아닌 single linked list로도 충분할때

 분 류  멤버 함수  설 명
Iterators begin  첫 번째 원소를 가리키는 반복자를 리턴한다.
cbegin  첫 번째 원소를 가리키는 상수 반복자를 리턴한다.
end  마지막 원소를 가리키는 반복자를 리턴한다.
cend  마지막 원소를 가리키는 상수 반복자를 리턴한다.
rbegin  제공 안 함
crbegin  제공 안 함
rend  제공 안 함
crend  제공 안 함
Element access at  제공 안 함
operator[]  제공 안 함
front  첫 번째 원소의 참조를 리턴한다.
back  제공 안 함
Capacity empty  원소 존재 유무를 체크한다. 아무것도 없으면 true, 있으면 false를 리턴한다.
size  제공 안 함
max_size  담을 수 있는 원소의 최대 개수를 리턴한다.
resize  list의 크기를 변경하고 default 값이나 임의 값으로 초기화한다.
capacity  제공 안 함
reserve  제공 안 함
shrink_to_fit  제공 안 함
Modifiers clear  list의 모든 원소를 제거한다.
assign  기존 원소들은 모두 제거 후, 임의 값으로 n개의 원소를 할당한다.
insert_after  지정된 위치에 뒤에 값을 삽입한다.
emplace_after  원소 삽입시 컨테이너 내부에서 생성 후 지정된 위치에 뒤에 값을 삽입한다.
emplace_hint  제공 안 함
erase_after  지정된 위치 다음이나 지정된 위치 이후의 지정한 범위의 모든 데이터를 지운다.
push_front  list의 처음에 원소를 추가한다.
emplace_front  원소 삽입시 컨테이너 내부에서 생성 후 컨테이너의 처음에 원소를 추가한다.
pop_front  list의 처음 원소를 제거한다.
push_back  제공 안 함
emplace_back  제공 안 함
pop_back  제공 안 함
swap  list1.swap( list2 )일때 list1과 list2를 swap한다.
List operations merge  list1.merge( list2 )일때 list1에 list2를 정렬하면서 병합한다.
splice  2개의 list 중 인자로 주어지는 list의 지정된 원소들을 대상 list로 이동시킨다.
remove  인자로 받은 값으로 받은 값과 같은 값의 원소를 모두 제거한다.
remove_if  함수객체의 조건을 만족하는 원소를 모두 제거한다.
reverse  list에 담긴 원소의 순서를 역순으로 바꾼다.
unique  list에 담긴 원소 중 연속적으로 중복된 값이 배치된 원소를 제거한다.
sort  list에 담긴 원소를 정렬한다. 예 : list.sort( std::greater<int>() )
Lookup count  제공 안 함
find  제공 안 함
lower_bound  제공 안 함
upper_bound  제공 안 함
equal_range  제공 안 함
Observers key_comp  제공 안 함
value_comp  제공 안 함
hash_function  제공 안 함
key_eq  제공 안 함
Allocator get_allocator  list의 allocator 객체를 반환한다.

'Study > Language' 카테고리의 다른 글

[C++11 STL] std::array 개요  (0) 2022.02.25
[C++ STL] std::set 개요  (0) 2022.02.25
[C++ STL] list 개요  (0) 2022.02.25
[C++ STL] deque  (0) 2022.02.25
[C++ STL] map  (0) 2022.02.25

관련글 더보기