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

C++ STL list의 pop_front() 함수 완벽 정리: 문법과 예제

이 글에서는 C++ STL에서 제공하는 pop_front() 함수의 동작 원리, 문법 그리고 실제 활용 예제를 자세히 알아보겠습니다.

STL에서 list란 무엇인가?

list는 시퀀스 내 어느 위치에서든 상수 시간(constant time)에 삽입과 삭제가 가능한 자료구조입니다. list는 이중 연결 리스트(doubly linked list)로 구현되어 있어 메모리가 연속적으로 할당되지 않아도 됩니다.

list는 배열(array), vector, deque에 비해 컨테이너 내 임의의 위치에서 요소를 삽입, 추출, 이동하는 작업이 훨씬 빠르다는 장점이 있습니다. 반면 특정 요소에 직접 접근하는 것은 느린 편입니다. list는 forward_list와 유사하지만, forward_list는 단일 연결 리스트(singly linked list)로 구현되어 앞쪽 방향으로만 순회할 수 있다는 차이점이 있습니다.

pop_front() 함수란?

pop_front()는 C++ STL에 내장된 함수로, <list> 헤더 파일에 선언되어 있습니다. 이 함수는 list 컨테이너의 맨 앞에 있는 요소를 제거(pop)하는 역할을 합니다.

함수가 호출되면 컨테이너의 첫 번째 요소가 삭제되고, 기존의 두 번째 요소가 새로운 첫 번째 요소가 됩니다. 또한 이 함수를 호출하면 컨테이너의 크기(size)가 1만큼 감소합니다.

문법

void pop_front();

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

반환값

이 함수는 별도의 반환값이 없으며, 단순히 컨테이너의 첫 번째 요소를 삭제하는 동작만 수행합니다.

예제 1: 첫 번째 요소 삭제하기

#include <bits/stdc++.h>
using namespace std;
int main(){
    // 리스트 생성
    list<int> myList;
    // 리스트에 요소 삽입
    myList.push_back(1);
    myList.push_back(2);
    myList.push_back(3);
    myList.push_back(4);
    // pop_front() 호출 전 리스트 출력
    cout<<"List contains : ";
    for(auto i = myList.begin(); i != myList.end(); i++)
        cout << *i << " ";
    // pop_front()로 첫 번째 요소 제거
    myList.pop_front();
    // 첫 번째 요소 제거 후 리스트 출력
    cout<<"\nList after removing an element from front: ";
    for (auto i = myList.begin(); i != myList.end(); i++)
        cout << *i << " ";
    return 0;
}

실행 결과

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

List contains : 1 2 3 4
List after removing an element from front: 2 3 4

출력 결과를 보면 pop_front() 호출 후 첫 번째 요소였던 1이 제거되고, 나머지 요소들이 한 칸씩 앞으로 이동한 것을 확인할 수 있습니다.

예제 2: pop_front()로 리스트 전체 비우기

#include <iostream>
#include <list>
int main (){
    std::list<int> myList;
    myList.push_back (10);
    myList.push_back (20);
    myList.push_back (30);
    std::cout<<"removing the elements in a list : ";
    while (!myList.empty()){
        std::cout << ' ' << myList.front();
        myList.pop_front();
    }
    std::cout<<"\nSize of my empty list is: " << myList.size() << '\n';
    return 0;
}

실행 결과

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

removing the elements in a list : 10 20 30
Size of my empty list is: 0

이 예제에서는 empty() 함수와 함께 pop_front()를 반복 호출하여 리스트의 모든 요소를 순서대로 제거했습니다. 모든 요소가 삭제된 후 리스트의 크기가 0이 된 것을 확인할 수 있습니다. 이처럼 pop_front()는 큐(queue) 방식으로 데이터를 처리할 때 매우 유용하게 활용됩니다.