이 글에서는 C++에서 forward_list::cbefore_begin() 함수가 어떻게 동작하는지 자세히 알아보겠습니다.
forward_list란?
forward_list는 일반 리스트(list)와 달리 다음 요소와의 연결만 유지하는 자료구조입니다. 일반 리스트는 앞뒤 요소 모두와 연결되어 있어 양방향 순회가 가능하지만, forward_list는 앞쪽(순방향)으로만 순회할 수 있습니다.
forward_list::cbefore_begin() 함수는 C++ 표준 템플릿 라이브러리(STL)의 일부로, 리스트의 첫 번째 요소 앞에 있는 위치를 가리키는 데 사용됩니다.
이 함수를 호출하려면 <forward_list> 헤더 파일을 포함해야 합니다.
구문
Forward_List_Name.cbefore_begin();
매개변수
이 함수는 어떠한 매개변수도 받지 않습니다.
반환 값
forward_list의 첫 번째 요소 앞 위치를 가리키는 상수 반복자(constant iterator)를 반환합니다.
동작 원리 예시
입력: 8, 9, 32, 21 출력: 56 8 9 32 21
설명: 먼저 요소 8, 9, 32, 21을 가진 forward_list를 생성합니다. 그다음 cbefore_begin() 함수를 호출하여 리스트의 첫 번째 요소(8) 앞 위치를 가리키고, 해당 위치를 반복자 itr에 저장합니다. 이후 insert_after() 함수를 사용해 이 위치에 요소 56을 삽입합니다. 최종 출력이 56 8 9 32 21이 되어 56이 리스트 맨 앞에 추가된 것을 확인할 수 있으며, 이는 cbefore_begin() 함수가 올바르게 동작했음을 보여줍니다.
프로그램 접근 방법
- int 타입의 forward_list(예: "Lt")를 생성하고 값을 할당합니다.
- auto 타입의 객체 "itr"를 생성하고,
cbefore_begin()함수가 반환한 반복자를 저장합니다. insert_after()함수를 사용하여 리스트 맨 앞에 새 요소를 삽입합니다. 첫 번째 인수로 반복자 "itr"를, 두 번째 인수로 삽입할 값을 전달합니다.- for 루프를 시작하여 리스트를 출력합니다.
- 루프 내에서 auto 타입의 객체 "itr"를 생성하고,
begin()함수를 통해 리스트의 첫 번째 요소로 초기화합니다. cend()함수를 활용하여 "itr"가 리스트의 마지막 요소가 아닌 조건으로 루프의 종료 조건을 지정합니다.- *itr를 출력합니다.
알고리즘
시작
1단계 → main() 함수 내에서
forward_list<int> Lt={} 초기화
auto itr = Lt.cbefore_begin() 초기화
insert_after(itr, new_element) 호출
auto itr = Lt.begin(), itr != Lt.end(), ++itr 조건으로 루프 실행
*itr 출력
종료전체 예제 코드
#include<iostream>
#include<forward_list>
using namespace std;
int main() {
forward_list<int> Lt = { 40, 55, 67, 89 };
auto itr = Lt.cbefore_begin();
Lt.insert_after(itr, 77);
for (auto it = Lt.begin(); it != Lt.end(); ++it)
cout << *it << " ";
return 0;
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
77 40 55 67 89
실행 결과 77이 리스트의 맨 앞에 성공적으로 삽입된 것을 확인할 수 있습니다. 이처럼 cbefore_begin()은 insert_after()와 함께 사용하여 리스트 맨 앞에 새로운 요소를 손쉽게 추가할 수 있도록 도와주는 유용한 함수입니다.