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

C++ STL list pop_back() 함수 완벽 정리: 사용법과 예제

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

STL에서 리스트(List)란 무엇인가?

리스트는 시퀀스 내 임의의 위치에서 상수 시간(O(1))에 삽입과 삭제가 가능한 자료구조입니다. C++ STL의 std::list는 이중 연결 리스트(doubly linked list)로 구현되어 있어 비연속적인 메모리 할당을 허용합니다.

배열, vector, deque와 비교했을 때, 리스트는 컨테이너 내 임의 위치에서 요소를 삽입하거나 추출하고 이동하는 작업에서 훨씬 뛰어난 성능을 보여줍니다. 다만 특정 요소에 직접 접근(랜덤 액세스)하는 속도는 느린 편입니다. 리스트는 forward_list와 유사하지만, forward_list는 단일 연결 리스트(singly linked list)로 구현되어 있어 순방향으로만 순회할 수 있다는 차이점이 있습니다.

list::pop_back() 함수란?

list::pop_back()은 C++ STL의 내장 함수로, <list> 헤더 파일에 선언되어 있습니다. 이 함수는 리스트 컨테이너의 맨 뒤(마지막)에 있는 요소를 제거하는 역할을 합니다.

pop_back()을 호출하면 마지막 요소가 삭제되고, 그 앞에 있던 요소가 새로운 마지막 요소가 됩니다. 동시에 리스트 컨테이너의 크기(size)는 1만큼 감소합니다.

문법(Syntax)

list_container.pop_back();

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

반환 값(Return Value)

이 함수는 아무 값도 반환하지 않습니다(void 타입).

예제 1: 리스트 끝에서 요소 삭제하기

아래 코드는 pop_back() 함수를 사용하여 리스트의 끝에서 요소를 삭제하는 기본적인 예제입니다.

#include <bits/stdc++.h>
using namespace std;
int main(){
    // 리스트 생성
    list<int> myList;
    // 리스트에 요소 삽입
    myList.push_back(4);
    myList.push_back(9);
    myList.push_back(1);
    myList.push_back(3);
    // 삭제 전 리스트 출력
    cout<<"삭제 전 리스트 요소 : ";
    for (auto i = myList.begin(); i != myList.end(); i++)
        cout << *i << " ";
    // pop_back()으로 리스트 끝의 요소 제거
    myList.pop_back();
    // 삭제 후 리스트 출력
    cout << "\n끝의 요소를 삭제한 후 리스트: ";
    for (auto i = myList.begin(); i != myList.end(); i++)
        cout << *i << " ";
    return 0;
}

출력 결과

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

삭제 전 리스트 요소 : 4 9 1 3
끝의 요소를 삭제한 후 리스트: 4 9 1

예제 2: pop_back()을 활용한 요소 곱셈 계산

아래 코드는 pop_back() 함수로 리스트의 요소를 하나씩 삭제하면서, 동시에 리스트에 담긴 모든 숫자의 곱을 계산하는 예제입니다.

#include <bits/stdc++.h>
using namespace std;
int main(){
    list<int> myList;
    int product = 1;
    myList.push_back (40);
    myList.push_back (20);
    myList.push_back (30);
    // 리스트가 빌 때까지 반복
    while (!myList.empty()){
        product*=myList.back();
        myList.pop_back();
    }
    cout<<"리스트 요소들의 곱 : "<<product<< '\n';
    return 0;
}

출력 결과

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

리스트 요소들의 곱 : 24000

정리

list::pop_back()은 리스트 컨테이너의 마지막 요소를 효율적으로 제거할 수 있는 함수입니다. 위 예제에서 볼 수 있듯이, back() 함수와 함께 사용하면 리스트를 순회하며 마지막 요소부터 차례대로 처리하는 로직을 간단하게 구현할 수 있습니다. 단, 빈(empty) 리스트에 대해 pop_back()을 호출하면 정의되지 않은 동작(undefined behavior)이 발생할 수 있으므로, 반드시 empty() 함수로 리스트가 비어 있는지 확인한 후 호출하는 것이 안전합니다.