[Basic C++] #36_forward_list, 순차 컨테이너
C++ 개발에서 표준 라이브러리(STL)의 forward_list에 대해 알아보겠습니다.
"전문가를 위한 C"의 16 항목, "컨테이너와 반복자 이해하기"에 해당하는 내용입니다.
Overview
- 개념
- 자체 메서드
#0. 개념
- "forward_list"는 단방향 링크라는 점만 제외하면 "list"와 비슷합니다.
- "forward_list"는 단방향 링크이기 때문에 "반복자"가 한쪽으로만 이동이 가능합니다. 특정 항목에 접근하려면 반드시 이전 항목에 선제적으로 접근해야합니다.
- "begin()" 메서드는 폐쇄형 범위만 지원하여 첫 항목을 바로 리턴하죠.
- 하지만, "forward_list"는 마지막 항목뿐만 아니라 시작 항목도 "개방형 범위"로 제공해야 합니다.
- 따라서, "forward_list"는 첫 항목의 직전 위치를 반환하는 "before_begin()"메서드를 제공합니다.
- "end()"와 같이 "before_begin()" 메서드 또한 가상의 위치를 반환하기 때문에 역참조를 통해 항목에 접근해선 안 되겠죠.
#1. 자체 제공 메서드
forward_list<int> list1{ 1, 2, 3, 4, 5};
// 1. before_begin(): 시작 항목의 바로 직전 위치를 반환합니다.
forward_list<int>::const_iterator cIter = list1.before_begin();
// 2. emplace_after(const_iterator pos, T&& val): pos의 다음 위치에 임시객체(우측 참조형)를 삽입합니다.
int a = 5;
list1.emplace_after(cIter, a+3);
// 3. erase_after(const_iterator pos): 정방향 목록의 pos 뒤에서 항목을 제거합니다.
list1.erase_after(cIter);
/*
4. insert_after(const_iterator pos): 정방향 목록의 pos 뒤에 요소를 삽입합니다.
a. insert_after(const_iterator Where, const Type& Val);
2. insert_after(const_iterator Where, size_type Count, const Type& Val);
3. insert_after(const iterator Where, initializer_list<Type> IList);
4. insert_after(const_iterator Where, Type&& Val);
5. insert_after(const_iterator Where, InputIterator First, InputIterator Last);
*/
list1.insert_after(cIter, 5);
// 5. splice_after(const_iterator pos, forward_list& anotherList): 정방향 목록의 pos뒤에 forward list를 이어 붙입니다.
forward_list<int> list2{5, 6, 7, 8, 9};
list1.splice_after(cIter, list2);
Details
- "list"와 대부분의 메서드들이 동일하게 동작합니다.
- 위 예제 코드는 forward_list에만 사용하는 메서드들을 정리해봤습니다.
- 보통은 삽입을 위해 "after"가 붙고, 시작 항목의 직전 위치를 얻기 위해 "before_begin"이 있다고 기억하면 될 것 같습니다.
'언어 > Basic C++' 카테고리의 다른 글
[Basic C++] #38_map, 연관 컨테이너 (0) | 2022.06.23 |
---|---|
[Basic C++] #37_pair (0) | 2022.06.22 |
[Basic C++] #35_list, 순차 컨테이너 (0) | 2022.06.19 |
[Basic C++] #34_반복자, 반복자의 활용 (0) | 2022.06.17 |
[Basic C++] #33_Vector, 순차 컨테이너 (0) | 2022.06.17 |