C++의 STL 컨테이너 중 하나인 std::list에 여러 개의 요소가 저장되어 있다고 가정해 보겠습니다. 이때 이 리스트에서 마지막 요소를 삭제해야 하는 상황을 생각할 수 있습니다.
예를 들어 리스트의 요소가 [10, 41, 54, 20, 23, 69, 84, 75]와 같이 구성되어 있다면, 마지막 요소는 75입니다. 이 글에서는 C++ 코드를 통해 리스트의 마지막 요소를 삭제하는 방법을 살펴보겠습니다.
핵심: pop_back() 함수
std::list에는 마지막 요소를 제거하는 전용 멤버 함수인 pop_back()이 제공됩니다. 이 함수는 별도의 인덱스 계산 없이 리스트의 맨 뒤 요소를 즉시 삭제하며, 시간 복잡도는 O(1)로 매우 효율적입니다. 단, 삭제만 수행하고 삭제된 값을 반환하지는 않으므로 값이 필요하다면 back()으로 미리 확인해 두어야 합니다.
예제 코드
#include<iostream>
#include<list>
using namespace std;
void display(list<int> my_list) {
for (auto it = my_list.begin(); it != my_list.end(); ++it)
cout << *it << " ";
}
int main() {
int arr[] = {10, 41, 54, 20, 23, 69, 84, 75};
int n = sizeof(arr) / sizeof(arr[0]);
list<int> my_list;
for (int i = 0; i < n; i++) {
my_list.push_back(arr[i]);
}
cout << "삭제 전 리스트: ";
display(my_list);
my_list.pop_back(); // 마지막 요소 삭제
cout << "\n삭제 후 리스트: ";
display(my_list);
return 0;
}실행 결과
삭제 전 리스트: 10 41 54 20 23 69 84 75 삭제 후 리스트: 10 41 54 20 23 69 84
코드 설명
위 예제의 동작 흐름은 다음과 같습니다.
1. 배열 데이터를 리스트로 변환: 초기 배열 arr의 요소들을 push_back() 함수를 사용하여 하나씩 리스트 뒤에 추가합니다.
2. 삭제 전 상태 출력: display() 헬퍼 함수가 반복자(iterator)를 이용해 리스트의 모든 요소를 순회하며 출력합니다.
3. 마지막 요소 삭제: pop_back()을 호출하면 리스트의 마지막 위치에 있던 75가 제거됩니다.
4. 삭제 후 상태 출력: 최종적으로 75가 빠진 나머지 요소들이 출력되는 것을 확인할 수 있습니다.
참고 사항
빈(empty) 리스트에 대해 pop_back()을 호출하면 정의되지 않은 동작(undefined behavior)이 발생할 수 있습니다. 따라서 실제 프로젝트에서는 삭제 전에 empty() 함수로 리스트가 비어 있는지 반드시 검사하는 것이 안전합니다.