[Basic C++] #36_forward_list, 순차 컨테이너

2022. 6. 21. 02:11· 언어/Basic C++
목차
  1.  
  2. [Basic C++] #36_forward_list, 순차 컨테이너

 

[Basic C++] #36_forward_list, 순차 컨테이너

 

C++ 개발에서 표준 라이브러리(STL)의 forward_list에 대해 알아보겠습니다.

"전문가를 위한 C"의 16 항목, "컨테이너와 반복자 이해하기"에 해당하는 내용입니다.

 


 

Overview

 

  1. 개념
  2. 자체 메서드

 

#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
  1.  
  2. [Basic C++] #36_forward_list, 순차 컨테이너
'언어/Basic C++' 카테고리의 다른 글
  • [Basic C++] #38_map, 연관 컨테이너
  • [Basic C++] #37_pair
  • [Basic C++] #35_list, 순차 컨테이너
  • [Basic C++] #34_반복자, 반복자의 활용
Hardii2
Hardii2
Hardii2
개발 블로그
Hardii2
전체
오늘
어제
  • 분류 전체보기
    • 알고리즘
    • 웹 개발
      • Node.js
      • React
    • 게임개발
      • DirectX12
      • 관련 지식
      • Unreal C++
      • Unreal 블루프린트
    • 언어
      • Effective C++
      • Basic C++
      • 디자인 패턴
      • 자료구조
      • 기술 질문
    • 문제 풀이
      • BOJ 문제 풀이
      • Programmers 문제 풀이
      • geeksForgeeks 문제 풀이
    • 수학
      • 확률과 통계
      • 게임수학
    • 개인프로젝트
    • 그룹프로젝트
      • PM
      • Dev
    • Github

블로그 메뉴

  • 홈
  • 글쓰기

공지사항

인기 글

태그

  • 기술 질문
  • dfs
  • 우선순위 큐
  • 최단 경로
  • programmers
  • Effective C++
  • unreal
  • 개발
  • stl
  • 알고리즘
  • C++
  • 디자인 패턴
  • 트리
  • 그래프
  • DP
  • set
  • BFS
  • BOJ
  • 정렬
  • Unreal Blueprint

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
Hardii2
[Basic C++] #36_forward_list, 순차 컨테이너
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.