개요
이 튜토리얼에서는 C++ STL의 std::list 컨테이너에서 요소를 삭제하는 방법을 예제 프로그램과 함께 살펴보겠습니다.
STL list는 내부적으로 양방향 연결 리스트(doubly linked list)로 구현되어 있기 때문에, 리스트의 맨 앞(front)과 맨 뒤(back)에서 요소를 삽입하거나 삭제할 때 상수 시간 O(1)의 성능을 보장합니다.
주요 삭제 함수
- pop_front() : 리스트의 첫 번째 요소를 삭제합니다.
- pop_back() : 리스트의 마지막 요소를 삭제합니다.
두 함수 모두 반환값이 없으며, 빈(empty) 리스트에 호출하면 정의되지 않은 동작(undefined behavior)이 발생할 수 있습니다. 따라서 사용 전에 empty() 함수로 리스트가 비어 있는지 확인하는 것이 안전합니다.
예제 코드
#include<iostream>
#include<list>
using namespace std;
int main(){
list<int>list1={10,15,20,25,30,35};
cout << "The original list is : ";
for (list<int>::iterator i=list1.begin(); i!=list1.end();i++)
cout << *i << " ";
cout << endl;
//첫 번째 요소 삭제
list1.pop_front();
cout << "The list after deleting first element using pop_front() : ";
for (list<int>::iterator i=list1.begin(); i!=list1.end(); i++)
cout << *i << " ";
cout << endl;
//마지막 요소 삭제
list1.pop_back();
cout << "The list after deleting last element using pop_back() : ";
for (list<int>::iterator i=list1.begin(); i!=list1.end(); i++)
cout << *i << " ";
cout << endl;
}위 코드에서는 먼저 6개의 정수로 초기화된 리스트를 생성한 뒤, pop_front()로 첫 번째 요소(10)를 삭제하고, 이어서 pop_back()으로 마지막 요소(35)를 삭제합니다. 각 단계마다 반복자(iterator)를 사용해 리스트의 현재 상태를 출력하여 변화를 확인할 수 있습니다.
실행 결과
The original list is : 10 15 20 25 30 35 The list after deleting first element using pop_front() : 15 20 25 30 35 The list after deleting last element using pop_back() : 15 20 25 30
추가 팁
특정 값을 가진 요소를 삭제하고 싶다면 remove() 멤버 함수를 활용할 수 있습니다. 예를 들어 list1.remove(20)을 호출하면 값이 20인 모든 요소가 한 번에 제거됩니다. 조건 기반 삭제가 필요하다면 remove_if()를 사용하면 더욱 유연하게 처리할 수 있습니다.