Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ STL 스택 empty()와 size() 함수 완벽 가이드

이 글에서는 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()는 스택에 들어 있는 요소의 정확한 개수가 필요할 때 사용합니다. 두 함수 모두 매개변수 없이 호출하며, 반복문과 함께 사용하면 스택의 모든 요소를 안전하게 순회·처리할 수 있습니다.