이 글에서는 C++ STL에서 제공하는 list swap() 함수의 기능과 사용 방법을 예제 코드와 함께 자세히 살펴봅니다.
STL에서 리스트(List)란?
리스트는 시퀀스 내 어느 위치에서든 상수 시간(O(1))에 삽입과 삭제가 가능한 컨테이너입니다. 리스트는 내부적으로 이중 연결 리스트(doubly linked list)로 구현되어 있으며, 비연속적인 메모리 할당을 허용합니다.
배열(array), 벡터(vector), 덱(deque)과 비교하면 리스트는 컨테이너 내 임의 위치에서 요소를 삽입·추출·이동하는 작업에서 훨씬 뛰어난 성능을 보여줍니다. 다만 인덱스를 통한 직접 접근은 느리다는 단점이 있습니다.
리스트는 forward_list와 유사하지만, forward_list는 단일 연결 리스트(singly linked list)로 구현되어 앞쪽 방향으로만 순회할 수 있다는 차이점이 있습니다.
swap() 함수란?
swap() 함수는 한 리스트의 요소들을 다른 리스트와 맞바꾸는(swap) 데 사용됩니다. 단, 두 리스트는 반드시 동일한 데이터 타입이어야 합니다. 리스트의 swap은 내부 포인터만 교환하므로 매우 빠르게 수행됩니다.
문법(Syntax)
listname1.swap(listname2);
예제 – 입출력 동작
입력 List1: 50 60 80 90
List2: 90 80 70 60
스왑 연산 후 출력
List1: 90 80 70 60
List2: 50 60 80 90
입력 List1: 45 46 47 48 49
List2: 50 51 52 53 54
스왑 연산 후 출력
List1: 50 51 52 53 54
List2: 45 46 47 48 49구현 절차
먼저 두 개의 리스트를 초기화합니다.
두 리스트의 내용을 출력합니다.
swap() 함수를 호출하여 두 리스트를 맞바꿉니다.
마지막으로 스왑 연산 후의 두 리스트를 출력합니다.
위 절차를 따르면 두 리스트의 요소를 손쉽게 맞바꿀 수 있습니다.
예제 1
// C++ 코드: STL에서 list swap() 함수의 동작을 보여줍니다
#include <iostream>
#include <list>
using namespace std;
int main() {
// 두 개의 리스트 초기화
list<int> list1 = { 10, 20, 30, 40, 50 };
cout << "List1: ";
for (auto x = list1.begin(); x != list1.end(); ++x)
cout << *x << " ";
list<int> list2 = { 40, 50, 60, 70, 80 };
cout << "\nList2: ";
for (auto x = list2.begin(); x != list2.end(); ++x)
cout << *x << " ";
// swap() 함수 호출
list1.swap(list2);
cout << "\n스왑 후 List1: ";
for (auto x = list1.begin(); x != list1.end(); ++x)
cout << *x << " ";
cout << "\n스왑 후 List2: ";
for (auto x = list2.begin(); x != list2.end(); ++x)
cout << *x << " ";
return 0;
}실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
입력 - List1: 10 20 30 40 50
List2: 40 50 60 70 80
출력 - 스왑 후 List1: 40 50 60 70 80
스왑 후 List2: 10 20 30 40 50예제 2
// C++ 코드: STL에서 list swap() 함수의 동작을 보여줍니다
#include <iostream>
#include <list>
using namespace std;
int main() {
// 두 개의 리스트 초기화
list<int> list1 = { 11, 12, 13, 14, 15 };
cout << "List1: ";
for (auto x = list1.begin(); x != list1.end(); ++x)
cout << *x << " ";
list<int> list2 = { 16, 17, 18, 19, 20 };
cout << "\nList2: ";
for (auto x = list2.begin(); x != list2.end(); ++x)
cout << *x << " ";
// swap() 함수 호출
list1.swap(list2);
cout << "\n스왑 후 List1: ";
for (auto x = list1.begin(); x != list1.end(); ++x)
cout << *x << " ";
cout << "\n스왑 후 List2: ";
for (auto x = list2.begin(); x != list2.end(); ++x)
cout << *x << " ";
return 0;
}실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
입력 - List1: 11 12 13 14 15
List2: 16 17 18 19 20
출력 - 스왑 후 List1: 16 17 18 19 20
스왑 후 List2: 11 12 13 14 15정리
C++ STL의 list swap() 함수는 두 리스트의 내용을 상수 시간에 서로 교환하는 효율적인 방법입니다. 별도의 복사나 반복문 없이 한 줄의 호출만으로 두 리스트 전체를 맞바꿀 수 있으므로, 리스트 데이터를 교체해야 하는 상황에서 적극적으로 활용해 보시기 바랍니다.