이 글에서는 C++에서 remove() 함수의 동작 원리, 문법, 그리고 실제 활용 예제를 자세히 알아보겠습니다.
STL에서 리스트(List)란?
리스트는 시퀀스의 어느 위치에서든 상수 시간(O(1))에 삽입과 삭제를 수행할 수 있는 자료구조입니다. 리스트는 이중 연결 리스트(doubly linked list)로 구현되어 있으며, 비연속적인 메모리 할당을 허용합니다. 따라서 배열(array), 벡터(vector), 덱(deque)에 비해 컨테이너 내 임의 위치에서 요소를 삽입, 추출, 이동하는 작업에서 훨씬 뛰어난 성능을 발휘합니다.
다만 리스트는 요소에 대한 직접 접근 속도가 느리다는 단점이 있습니다. 또한 forward_list와 유사하지만, forward_list 객체는 단일 연결 리스트(singly linked list)이므로 앞쪽 방향으로만 순회할 수 있다는 차이점이 있습니다.
remove() 함수란?
remove()는 C++ STL에 내장된 함수로, <list> 헤더 파일에 선언되어 있습니다. 이 함수는 리스트 컨테이너에서 특정 값 또는 요소를 제거하는 데 사용됩니다. 매개변수로 전달받은 값과 일치하는 모든 요소를 리스트 컨테이너에서 삭제하며, 필요한 경우 해당 요소들의 소멸자(destructor)를 호출합니다.
문법
list_name.remove(const value_type& value);
이 함수는 리스트 컨테이너에서 검색하여 제거하고자 하는 값을 매개변수로 받습니다.
반환값
이 함수는 별도의 값을 반환하지 않으며, 단순히 컨테이너에서 일치하는 요소들을 제거하는 역할만 수행합니다.
예제
/*
아래 코드에서는 리스트에 요소를 삽입한 후,
값을 기준으로 요소를 제거하는 과정을 보여줍니다. */
#include <bits/stdc++.h>
using namespace std;
int main(){
// 리스트 생성
list<int> myList;
// 리스트에 요소 삽입
myList.push_back(1);
myList.push_back(1);
myList.push_back(3);
myList.push_back(2);
myList.push_back(5);
// 요소 제거 전 리스트 출력
cout<<"List before removing elements: ";
for (auto i = myList.begin(); i!=myList.end(); i++){
cout << *i << " ";
}
// 리스트에서 1, 2, 3 제거
myList.remove(1);
myList.remove(2);
myList.remove(3);
// 요소 제거 후 리스트 출력
cout << "\nList after removing elements: ";
for (auto i = myList.begin(); i!= myList.end(); i++){
cout << *i << " ";
}
return 0;
}실행 결과
위 코드를 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.
List before removing elements: 1 1 3 2 5 List after removing elements: 5
실행 결과에서 볼 수 있듯이, remove() 함수는 지정한 값과 일치하는 모든 요소를 한 번에 제거합니다. 위 예제에서는 값이 1인 요소 두 개가 모두 삭제된 것을 확인할 수 있으며, 최종적으로 조건에 맞지 않는 값 5만 리스트에 남게 됩니다.