이 글에서는 C++ STL에서 제공하는 forward_list::front()와 forward_list::empty() 함수의 동작 방식, 문법 그리고 실제 사용 예제를 자세히 살펴보겠습니다.
STL에서 forward_list란 무엇인가?
forward_list는 시퀀스 내 임의의 위치에서도 상수 시간(O(1))에 삽입과 삭제 연산을 수행할 수 있는 시퀀스 컨테이너입니다. 내부적으로 단일 연결 리스트(singly-linked list)로 구현되어 있으며, 각 요소가 다음 요소를 가리키는 링크를 통해 요소들의 순서가 유지됩니다. 양방향 탐색이 가능한 std::list와 달리 forward_list는 앞쪽 방향으로만 순회할 수 있다는 특징이 있습니다.
forward_list::front()란?
forward_list::front()는 C++ STL의 내장 함수로, <forward_list> 헤더 파일에 선언되어 있습니다. 이 함수는 forward_list 컨테이너의 첫 번째 요소에 대한 참조(reference)를 반환하므로, 컨테이너가 비어 있지 않다면 첫 번째 요소에 직접 접근할 수 있습니다.
문법
forwardlist_container.front();
이 함수는 별도의 매개변수를 받지 않습니다.
반환값
컨테이너의 첫 번째 요소를 가리키는 참조를 반환합니다.
예제
아래 예제에서는 forward_list를 생성하고 요소를 삽입한 뒤, front() 함수를 호출하여 리스트의 첫 번째 요소를 출력합니다.
#include <forward_list>
#include <iostream>
using namespace std;
int main(){
forward_list<int> forwardList = {2, 6, 1, 0 };
cout<<"my first element in a forward list is: ";
cout<<forwardList.front();
return 0;
}
출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
my first element in a forward list is: 2
forward_list::empty()란?
forward_list::empty() 역시 C++ STL의 내장 함수로, <forward_list> 헤더 파일에 선언되어 있습니다. 이 함수는 forward_list 컨테이너가 비어 있는지 여부를 검사하여, 비어 있으면 true를, 그렇지 않으면 false를 반환합니다. 내부적으로는 컨테이너의 크기(size)가 0인지를 확인하는 방식으로 동작합니다.
문법
bool forwardlist_container.empty();
이 함수는 별도의 매개변수를 받지 않습니다.
반환값
컨테이너가 비어 있으면(크기가 0이면) true를, 요소가 하나라도 존재하면 false를 반환합니다.
예제
아래 예제에서는 먼저 비어 있는 forward_list를 생성하고 empty() 함수를 호출하여 리스트가 비어 있는지 확인합니다. 이후 요소를 삽입한 뒤 다시 empty() 함수를 호출하여 결과가 어떻게 달라지는지 비교해 봅니다.
#include <forward_list>
#include <iostream>
using namespace std;
int main(){
forward_list<int> forwardList = {};
if (forwardList.empty()){
cout << "Yess forward list is empty\n";
}
forwardList = {1, 3, 4, 5};
if (forwardList.empty()){
cout << "Yess forward list is empty\n";
} else {
cout << "No forward list is not empty\n";
}
return 0;
}
출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Yess forward list is empty No forward list is not empty
정리
forward_list::front()는 리스트의 첫 번째 요소에 상수 시간에 접근할 수 있는 편리한 함수이며, forward_list::empty()는 컨테이너가 비어 있는지 확인하는 데 사용됩니다. 특히 front()를 호출하기 전에 empty()로 컨테이너가 비어 있는지 먼저 검사하면, 빈 컨테이너에 대한 잘못된 접근으로 인한 정의되지 않은 동작(undefined behavior)을 예방할 수 있습니다.