이 글에서는 C++에서 forward_list::swap() 함수의 동작 원리와 사용법을 자세히 살펴보겠습니다.
포워드 리스트(Forward List)란?
포워드 리스트는 시퀀스 내 어느 위치에서든 상수 시간(O(1))에 삽입과 삭제 연산을 수행할 수 있는 시퀀스 컨테이너입니다. 포워드 리스트는 단일 연결 리스트(singly-linked list)로 구현되며, 각 요소가 시퀀스상 다음 요소를 가리키는 링크로 연결되어 있어 순서가 유지됩니다.
forward_list::swap()이란?
forward_list::swap()은 C++ 표준 라이브러리에 포함된 함수로, 동일한 데이터 타입을 가진 두 리스트의 내용물을 서로 맞바꾸는(교환하는) 데 사용됩니다. 이 함수를 활용하면 별도의 임시 변수나 반복문 없이 두 리스트 전체를 효율적으로 교환할 수 있습니다.
구문(Syntax)
forward_list1.swap(forward_list2)
또는 비멤버 함수 형태로 다음과 같이 호출할 수 있습니다.
swap(forward_list first, forward_list second)
실행 결과 예시
출력 – 첫 번째 리스트 : 57 99 54 34 84 두 번째 리스트 : 45 65 78 96 77 스왑 연산 후 결과 첫 번째 리스트 : 45 65 78 96 77 두 번째 리스트 : 57 99 54 34 84
구현 접근 방법
먼저 두 개의 포워드 리스트를 초기화합니다.
초기화된 두 포워드 리스트의 내용을 출력합니다.
swap() 함수를 호출하여 두 리스트를 교환합니다.
스왑 연산 이후의 포워드 리스트를 출력합니다.
위 접근 방법을 따르면 두 포워드 리스트의 내용을 손쉽게 교환할 수 있습니다.
알고리즘
알고리즘 흐름은 다음과 같습니다.
STEP 1 – 두 개의 포워드 리스트를 초기화하고 출력한다.
첫 번째 리스트 : forward_list<int> list1 = { 10, 20, 30, 40, 50 }
for(auto x = list1.begin(); x != list1.end(); ++x)
cout << *x << " ";
두 번째 리스트 : forward_list<int> list2 = { 40, 30, 20, 10, 50 }
for(auto x = list2.begin(); x != list2.end(); ++x)
cout << *x << " ";
END
STEP 2 – 스왑 연산을 수행하는 swap 함수를 호출한다.
swap(list1, list2);
END
Stop전체 코드 예제
// forward_list::swap() 동작을 보여주는 C++ 코드
#include <iostream>
#include <forward_list>
using namespace std;
int main() {
// 두 개의 포워드 리스트 초기화
forward_list<int> list1 = { 10, 20, 30, 40, 50 };
cout << "List1의 요소 : ";
for (auto x = list1.begin(); x != list1.end(); ++x)
cout << *x << " ";
cout << endl;
forward_list<int> list2 = { 40, 30, 20, 10, 50 };
cout << "List2의 요소 : ";
for (auto x = list2.begin(); x != list2.end(); ++x)
cout << *x << " ";
cout << endl;
// 스왑 연산을 수행하는 함수 호출
swap(list1, list2);
cout << "스왑 후 List1 : ";
for (auto x = list1.begin(); x != list1.end(); ++x)
cout << *x << " ";
cout << endl;
cout << "스왑 후 List2 : ";
for (auto x = list2.begin(); x != list2.end(); ++x)
cout << *x << " ";
return 0;
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
출력 – List1의 요소 : 10 20 30 40 50 List2의 요소 : 40 30 20 10 50 스왑 후 List1 : 40 30 20 10 50 스왑 후 List2 : 10 20 30 40 50
다른 값으로 실행한 경우의 결과도 확인해 보겠습니다.
출력 – List1의 요소 : 23 56 78 49 11 List2의 요소 : 11 49 78 56 23 스왑 후 List1 : 11 49 78 56 23 스왑 후 List2 : 23 56 78 49 11
정리
forward_list::swap() 함수는 두 리스트의 내용을 상수 시간에 교환할 수 있는 매우 효율적인 기능입니다. 내부적으로는 노드 데이터를 하나씩 복사하는 것이 아니라 내부 포인터만 교환하기 때문에 리스트 크기와 무관하게 빠른 성능을 보장합니다. 두 컨테이너의 타입이 동일해야 하며, 멤버 함수 형태와 비멤버 함수 형태 모두 사용 가능하다는 점을 기억하면 됩니다.