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

C++ STL forward_list::clear()와 erase_after() 함수 완벽 정리

이 글에서는 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는 현재 위치의 이전 노드에 접근할 수 없기 때문에, 삭제 연산이 '다음' 위치를 기준으로 동작한다는 점을 기억해 두면 좋습니다.