이 글에서는 C++ STL에서 forward_list::begin()과 forward_list::end() 함수의 동작 방식, 문법, 그리고 실제 사용 예제를 자세히 살펴보겠습니다.
STL에서 forward_list란 무엇인가?
forward_list는 시퀀스 컨테이너(sequence container)의 일종으로, 시퀀스 내 임의의 위치에서 상수 시간(constant time) 안에 삽입과 삭제 연산을 수행할 수 있는 것이 특징입니다. forward_list는 단일 연결 리스트(singly-linked list)로 구현되며, 각 요소가 시퀀스상 다음 요소와 링크로 연결되어 있어 순서가 유지됩니다.
forward_list::begin()이란?
forward_list::begin()은 C++ STL의 내장 함수로, <forward_list> 헤더 파일에 선언되어 있습니다. begin()은 forward_list 컨테이너의 첫 번째 요소를 가리키는 반복자(iterator)를 반환합니다. 실무에서는 begin()과 end()를 함께 사용하여 forward_list 컨테이너의 전체 범위(range)를 지정하는 경우가 대부분입니다.
문법
forwardlist_container.begin();
이 함수는 별도의 매개변수를 받지 않습니다.
반환 값
컨테이너의 첫 번째 요소를 가리키는 반복자를 반환합니다.
예제
#include <bits/stdc++.h>
using namespace std;
int main(){
// forward list 생성
forward_list<int> forwardList = { 4, 1, 2, 7 };
cout<<"forward List의 요소 출력\n";
// begin()을 호출하여 첫 번째 요소부터 순회
for (auto i = forwardList.begin(); i != forwardList.end(); ++i)
cout << ' ' << *i;
return 0;
}실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
forward List의 요소 출력 4 1 2 7
forward_list::end()란?
forward_list::end() 역시 C++ STL의 내장 함수로, <forward_list> 헤더 파일에 선언되어 있습니다. end()는 forward_list 컨테이너의 마지막 요소 바로 다음 위치(past-the-end)를 가리키는 반복자를 반환합니다. 이 반복자는 실제 유효한 요소를 가리키지 않으며, 주로 begin()과 함께 사용되어 컨테이너의 전체 범위를 나타내는 데 활용됩니다.
문법
forwardlist_container.end();
이 함수 역시 별도의 매개변수를 받지 않습니다.
반환 값
컨테이너의 마지막 요소 바로 다음 위치를 가리키는 반복자를 반환합니다.
예제
#include <bits/stdc++.h>
using namespace std;
int main(){
// forward list 생성
forward_list<int> forwardList = { 4, 1, 2, 7 };
cout<<"forward List의 요소 출력\n";
// begin()부터 end() 전까지 순회하며 요소 출력
for (auto i = forwardList.begin(); i != forwardList.end(); ++i)
cout << ' ' << *i;
return 0;
}실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
forward List의 요소 출력 4 1 2 7
핵심 정리
begin()은 컨테이너의 시작점을, end()는 끝을 표시하는 경계 역할을 합니다. 두 함수를 조합하면 for 루프나 STL 알고리즘에서 forward_list의 모든 요소를 손쉽게 순회할 수 있습니다. 단, forward_list는 단방향 순회만 지원하므로 반복자를 감소시키는 연산(--)은 사용할 수 없다는 점에 유의해야 합니다.