이 글에서는 C++ STL의 stack::swap() 함수가 어떻게 동작하는지, 그 문법과 실제 사용 예제를 자세히 알아보겠습니다.
C++ STL에서 스택(Stack)이란?
스택은 LIFO(Last In First Out, 후입선출) 방식으로 데이터를 저장하는 자료구조입니다. 즉, 삽입과 삭제가 항상 맨 위(top), 즉 가장 마지막에 삽입된 요소에서 이루어집니다. 접시를 쌓아 올린 더미를 떠올리면 이해하기 쉽습니다. 새 접시를 쌓을 때는 맨 위에 올리고, 접시를 꺼낼 때 역시 맨 위에서부터 꺼내는 것과 같은 원리입니다.
stack::swap() 함수란?
stack::swap()은 C++ 표준 템플릿 라이브러리(STL)에 내장된 함수로, <stack> 헤더 파일에 정의되어 있습니다. 이 함수는 두 스택의 내용물을 서로 교환(swap)하는 데 사용되며, 연관된 컨테이너들의 내용을 맞바꾸는 역할을 합니다.
문법(Syntax)
stack_name.swap(stack& stack2);
매개변수(Parameters)
이 함수는 다음 매개변수를 받습니다.
stack2: 현재 스택과 내용을 서로 교환할 다른 스택 컨테이너
반환값(Return Value)
이 함수는 아무 값도 반환하지 않습니다(void).
입력 예시
std::stack<int> odd; odd.emplace(1); odd.emplace(3); odd.emplace(5); std::stack<int> eve; eve.emplace(2); eve.emplace(4); eve.emplace(6); odd.swap(eve);
출력 결과
odd: 2 4 6 eve: 1 3 5
위 예제에서 볼 수 있듯이 swap() 호출 후 두 스택의 내용이 완전히 맞바뀐 것을 확인할 수 있습니다.
실전 예제 코드
#include <iostream>
#include <stack>
using namespace std;
int main(){
stack<int> stck_1, stck_2;
// 스택 1에 요소 삽입
stck_1.push(1);
stck_1.push(2);
stck_1.push(3);
stck_1.push(4);
// 스택 2에 요소 삽입
stck_2.push(5);
stck_2.push(6);
stck_2.push(7);
stck_2.push(8);
// 스택 1과 스택 2의 요소를 서로 교환
stck_1.swap(stck_2);
cout << "스택 1의 요소들: ";
while (!stck_1.empty()){
cout << stck_1.top() << " ";
stck_1.pop();
}
cout << "\n스택 2의 요소들: ";
while (!stck_2.empty()){
cout << stck_2.top() << " ";
stck_2.pop();
}
return 0;
}실행 결과
위 코드를 실행하면 다음과 같은 출력이 생성됩니다.
스택 1의 요소들: 8 7 6 5 스택 2의 요소들: 4 3 2 1
출력 결과를 보면 원래 스택 1에 있던 1, 2, 3, 4가 스택 2로 이동하고, 스택 2에 있던 5, 6, 7, 8이 스택 1로 이동한 것을 알 수 있습니다. 이처럼 swap() 함수를 활용하면 두 스택의 내용을 간단하고 효율적으로 맞바꿀 수 있습니다.