Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ STL forward_list::before_begin() 함수 완벽 정리

이 글에서는 C++ STL의 forward_list::before_begin() 함수의 동작 방식, 문법, 그리고 실제 활용 예제를 자세히 살펴보겠습니다.

STL에서 forward_list란?

forward_list는 시퀀스(sequence) 컨테이너의 일종으로, 시퀀스 내 임의의 위치에서 상수 시간(O(1))에 삽입(insert)과 삭제(erase) 연산을 수행할 수 있는 것이 특징입니다.

forward_list는 내부적으로 단일 연결 리스트(singly-linked list)로 구현되어 있으며, 각 요소가 다음 요소를 가리키는 링크(link)의 연결을 통해 요소들의 순서가 유지됩니다.

forward_list::before_begin()이란?

forward_list::before_begin()은 C++ STL에 내장된 함수로, <forward_list> 헤더 파일에 선언되어 있습니다.

이 함수는 forward_list 컨테이너의 첫 번째 요소 바로 앞 위치를 가리키는 반복자(iterator)를 반환합니다. 단일 연결 리스트 구조의 특성상 맨 앞에 요소를 삽입하려면 '첫 번째 요소 이전' 위치가 필요한데, 이때 before_begin()이 유용하게 사용됩니다.

문법(Syntax)

forwardlist_container.before_begin();

이 함수는 매개변수를 받지 않습니다.

반환 값(Return Value)

시퀀스의 시작 위치 바로 앞을 가리키는 반복자를 반환합니다.

예제 1: before_begin()으로 맨 앞에 요소 삽입하기

아래 코드에서는 forward_list를 생성한 뒤, before_begin() 함수로 첫 번째 요소 앞 위치를 얻고, insert_after() 함수를 사용해 해당 위치에 새로운 요소를 삽입합니다. 실행 결과의 변화를 확인해 보겠습니다.

#include <bits/stdc++.h>
using namespace std;
int main() {
   // forward_list 생성 및 초기화
   forward_list<int> forwardList = { 3, 6, 1, 2, 4 };
   // before_begin() 함수 호출
   auto i = forwardList.before_begin();
   // forward_list 맨 앞에 요소 삽입
   forwardList.insert_after(i, 7);
   cout<< "forward_list의 요소들:" << endl;
   for (auto j = forwardList.begin(); j != forwardList.end(); ++j)
      cout << *j << " ";
   return 0;
}

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

forward_list의 요소들:
7 3 6 1 2 4

기존 리스트 {3, 6, 1, 2, 4}의 맨 앞에 값 7이 성공적으로 삽입된 것을 확인할 수 있습니다.

예제 2: 한 줄로 간결하게 작성하기

before_begin()과 insert_after()를 한 줄로 연결하여 더욱 간결하게 표현할 수도 있습니다.

#include <bits/stdc++.h>
using namespace std;
int main() {
   forward_list<int> forwardList = {2, 23, 12, 11};
   forwardList.insert_after(forwardList.before_begin(), 19 );
   cout << "forward_list의 요소들: ";
   for (auto j = forwardList.begin(); j != forwardList.end(); ++j)
      cout << *j << " ";
   return 0;
}

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

forward_list의 요소들: 19 2 23 12 11

정리

forward_list::before_begin()은 첫 번째 요소 이전 위치를 가리키는 반복자를 반환하는 함수로, 주로 insert_after()와 함께 사용되어 리스트의 맨 앞에 새로운 요소를 삽입하는 용도로 활용됩니다. 단일 연결 리스트 기반인 forward_list의 특성을 이해하고 있다면, 이 함수의 역할을 쉽게 파악할 수 있습니다.