이 글에서는 C++ STL에서 제공하는 stack::empty() 함수와 stack::size() 함수의 동작 원리, 문법, 그리고 실제 활용 예제를 자세히 살펴보겠습니다.
C++ STL에서 스택(Stack)이란?
스택은 LIFO(Last In First Out, 후입선출) 방식으로 데이터를 저장하는 자료구조입니다. 즉, 가장 마지막에 삽입된 요소가 가장 먼저 삭제되며, 삽입과 삭제가 모두 스택의 맨 위(top)에서 이루어집니다.
접시를 쌓아 올린 모습을 떠올리면 이해하기 쉽습니다. 새 접시를 쌓을 때는 맨 위에 올리고, 접시를 꺼낼 때 역시 맨 위에서 꺼내는 것과 같습니다.
stack::empty()란 무엇인가?
stack::empty()는 C++ STL에 내장된 함수로, <stack> 헤더 파일에 정의되어 있습니다. 이 함수는 해당 스택 컨테이너가 비어 있는지 여부를 검사하고, 그 결과를 true 또는 false로 반환합니다.
여기서 '컨테이너가 비어 있다'는 것은 컨테이너의 크기(size)가 0이라는 의미입니다.
문법
stack_name.empty();
매개변수
이 함수는 어떤 매개변수도 받지 않습니다.
반환값
컨테이너가 비어 있으면 true, 그렇지 않으면 false를 반환합니다.
입력 예시
std::stack<int> stack1; stack1.emplace(1); stack1.emplace(2); stack1.emplace(3); stack1.empty();
출력 결과
false
입력 예시
std::stack<int> stack2; stack2.empty();
출력 결과
true
활용 예제
다음 예제는 empty() 함수를 활용해 스택이 빌 때까지 모든 요소를 곱하는 프로그램입니다.
#include <iostream>
#include <stack>
using namespace std;
int main(){
stack<int> stck;
int Product = 1;
stck.push(1);
stck.push(2);
stck.push(3);
stck.push(4);
stck.push(5);
stck.push(6);
while (!stck.empty()){
Product = Product * stck.top();
stck.pop();
}
cout<<"\n스택 요소들의 곱: "<<Product;
return 0;
}실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
스택 요소들의 곱: 720
stack::size()란 무엇인가?
stack::size() 역시 C++ STL에 내장된 함수로, <stack> 헤더 파일에 정의되어 있습니다. 이 함수는 해당 스택 컨테이너의 크기를 확인하고, 컨테이너에 저장된 요소의 개수를 정수 값으로 반환합니다.
컨테이너가 비어 있다면 size()는 0을 반환합니다.
문법
stack_name.size();
매개변수
이 함수는 어떤 매개변수도 받지 않습니다.
반환값
컨테이너에 저장된 요소의 개수(크기)를 반환합니다.
입력 예시
std::stack<int> stack1; stack1.emplace(1); stack1.emplace(2); stack1.emplace(3); stack1.size();
출력 결과
3
입력 예시
std::stack<int> stack2; stack2.size();
출력 결과
0
활용 예제
다음 예제는 size() 함수로 스택의 현재 크기를 출력한 뒤, 스택이 빌 때까지 모든 요소를 곱하는 프로그램입니다.
#include <iostream>
#include <stack>
using namespace std;
int main(){
stack<int> stck;
int Product = 1;
stck.push(1);
stck.push(2);
stck.push(3);
stck.push(4);
stck.push(5);
stck.push(6);
cout<<"스택의 크기: "<<stck.size();
while (stck.size()>0){
Product = Product * stck.top();
stck.pop();
}
cout<<"\n스택 요소들의 곱: "<<Product;
return 0;
}실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
스택의 크기: 6 스택 요소들의 곱: 720
정리
stack::empty()는 스택이 비어 있는지 불리언 값으로 판단할 때 유용하고, stack::size()는 스택에 들어 있는 요소의 정확한 개수가 필요할 때 사용합니다. 두 함수 모두 매개변수 없이 호출하며, 반복문과 함께 사용하면 스택의 모든 요소를 안전하게 순회·처리할 수 있습니다.