이 글에서는 C++ STL의 forward_list::clear()와 forward_list::erase_after() 함수의 동작 방식, 문법, 그리고 실제 사용 예제를 자세히 살펴보겠습니다.
STL에서 forward_list란 무엇인가?
forward_list는 시퀀스 컨테이너(sequence container)로, 시퀀스 내 어느 위치에서든 상수 시간(O(1))에 삽입과 삭제 연산을 수행할 수 있습니다. forward_list는 단일 연결 리스트(singly linked list)로 구현되어 있으며, 각 요소가 다음 요소를 가리키는 링크를 통해 순서가 유지됩니다.
forward_list::clear()란?
forward_list::clear()는 C++ STL의 내장 함수로, <forward_list> 헤더 파일에 선언되어 있습니다. 이 함수는 forward_list의 모든 요소를 한 번에 제거해야 할 때 사용합니다. clear()를 호출하면 forward_list의 모든 요소가 소멸되며, 리스트의 크기는 0이 됩니다.
문법
flist_container1.clear();
매개변수
이 함수는 매개변수를 받지 않습니다.
반환값
이 함수는 아무것도 반환하지 않습니다(void).
예제
Input: forward_list<int> forward = {1, 2, 3, 4};
forward.clear();
forward.size();
Output: 0실제 코드 예제
#include <forward_list>
#include <iostream>
using namespace std;
int main(){
forward_list<int> myList = { 10, 20, 30, 40 };
myList.clear();
for (auto i = myList.begin(); i != myList.end(); ++i)
cout << ' ' << *i;
cout << "List is cleared";
return 0;
}실행 결과
위 코드를 실행하면 다음과 같은 출력이 생성됩니다.
List is cleared
forward_list::erase_after()란?
forward_list::erase_after() 역시 C++ STL의 내장 함수로, <forward_list> 헤더 파일에 선언되어 있습니다. 이 함수는 특정 위치 다음에 있는 요소들을 제거할 때 사용합니다. 제거된 요소의 개수만큼 forward_list의 크기가 줄어듭니다.
문법
flist_container1.erase_after(unsigned int position);
매개변수
이 함수는 하나의 매개변수를 받으며, 해당 매개변수는 요소를 제거하기 시작할 기준 위치(반복자)입니다.
반환값
이 함수는 아무것도 반환하지 않습니다(void).
예제
Input: forward_list<int> forward = {1, 2, 3, 4};
forward.erase_after(2);
Output:
Forward list after erase_after() = 1 2 3실제 코드 예제
#include <forward_list>
#include <iostream>
using namespace std;
int main(){
forward_list<int> myList = { 10, 20, 30, 40, 50 };
forward_list<int>::iterator i;
i = myList.begin();
myList.erase_after(i);
cout << "Elements are : ";
for (auto i = myList.begin(); i != myList.end(); ++i)
cout << ' ' << *i;
return 0;
}실행 결과
위 코드를 실행하면 다음과 같은 출력이 생성됩니다.
Elements are : 10 30 40 50
정리
clear()는 forward_list의 모든 요소를 한꺼번에 삭제하여 크기를 0으로 만드는 반면, erase_after()는 지정한 위치 다음부터의 요소만 선택적으로 삭제합니다. 단일 연결 리스트 구조의 특성상 forward_list는 현재 위치의 이전 노드에 접근할 수 없기 때문에, 삭제 연산이 '다음' 위치를 기준으로 동작한다는 점을 기억해 두면 좋습니다.