본문 바로가기
Programming

C++ Stack 사용법

by 느리게 걷는 즐거움 2024. 7. 3.
반응형

C++에서 Stack 사용하기

스택(Stack)은 자료구조 중 하나로, 데이터를 후입선출(LIFO, Last In First Out) 방식으로 저장하고 관리하는 구조입니다. 스택은 주로 함수 호출의 관리, 수식의 계산, 역순 문자열 처리 등 다양한 분야에서 사용됩니다. 이번 글에서는 C++ 표준 라이브러리에서 제공하는 `stack`을 사용하는 방법에 대해 알아보겠습니다.

C++에서 `stack`을 사용하려면 표준 라이브러리의 `<stack>` 헤더 파일을 포함해야 합니다.

#include <stack>


스택의 기본 사용법

스택은 템플릿 클래스이므로, 사용할 데이터 타입을 지정하여 선언합니다. 예를 들어, 정수를 저장하는 스택을 선언하려면 다음과 같이 작성합니다.

std::stack<int> myStack;

 

주요 함수와 사용 예제

`push`

`push` 함수는 스택의 맨 위에 새로운 요소를 추가합니다.

#include <iostream>
#include <stack>

int main() {
    std::stack<int> myStack;

    myStack.push(10);
    myStack.push(20);
    myStack.push(30);

    std::cout << "스택의 맨 위 요소: " << myStack.top() << std::endl;

    return 0;
}

위의 예제에서는 `10`, `20`, `30`을 차례로 스택에 추가합니다. 마지막으로 추가된 `30`이 스택의 맨 위에 위치합니다.

`pop`

`pop` 함수는 스택의 맨 위 요소를 제거합니다. 그러나 제거된 요소를 반환하지는 않습니다. 따라서 `top` 함수를 사용하여 요소를 제거하기 전에 그 값을 확인하는 것이 일반적입니다.

#include <iostream>
#include <stack>

int main() {
    std::stack<int> myStack;

    myStack.push(10);
    myStack.push(20);
    myStack.push(30);

    std::cout << "스택의 맨 위 요소: " << myStack.top() << std::endl;

    myStack.pop();
    std::cout << "pop() 호출 후 스택의 맨 위 요소: " << myStack.top() << std::endl;

    return 0;
}

 

`top`

`top` 함수는 스택의 맨 위 요소를 반환합니다.

#include <iostream>
#include <stack>

int main() {
    std::stack<int> myStack;

    myStack.push(10);
    myStack.push(20);
    myStack.push(30);

    std::cout << "스택의 맨 위 요소: " << myStack.top() << std::endl;

    return 0;
}
`empty`

`empty` 함수는 스택이 비어 있는지 여부를 확인합니다. 비어 있으면 `true`를, 그렇지 않으면 `false`를 반환합니다.

#include <iostream>
#include <stack>

int main() {
    std::stack<int> myStack;

    std::cout << "스택이 비어 있는가? " << (myStack.empty() ? "네" : "아니오") << std::endl;

    myStack.push(10);
    std::cout << "스택이 비어 있는가? " << (myStack.empty() ? "네" : "아니오") << std::endl;

    return 0;
}
`size`

`size` 함수는 스택에 있는 요소의 개수를 반환합니다.

#include <iostream>
#include <stack>

int main() {
    std::stack<int> myStack;

    myStack.push(10);
    myStack.push(20);

    std::cout << "스택의 크기: " << myStack.size() << std::endl;

    return 0;
}

스택의 응용 예제

스택은 다양한 상황에서 유용하게 사용할 수 있습니다. 여기서는 스택을 사용하여 문자열이 회문(앞뒤가 똑같은 문자열)인지 확인하는 간단한 예제를 살펴보겠습니다.

#include <iostream>
#include <stack>
#include <string>

bool isPalindrome(const std::string& str) {
    std::stack<char> s;
    
    for (char c : str) {
        s.push(c);
    }
    
    for (char c : str) {
        if (c != s.top()) {
            return false;
        }
        s.pop();
    }
    
    return true;
}

int main() {
    std::string input = "racecar";

    if (isPalindrome(input)) {
        std::cout << input << "은(는) 회문입니다." << std::endl;
    } else {
        std::cout << input << "은(는) 회문이 아닙니다." << std::endl;
    }

    return 0;
}

위 예제에서는 주어진 문자열을 스택에 저장한 후, 다시 꺼내면서 원래 문자열과 비교하여 회문 여부를 확인합니다.

결론

이번 글에서는 C++ 표준 라이브러리의 `stack`을 사용하는 방법에 대해 알아보았습니다. `stack`의 기본적인 사용법과 주요 함수들, 그리고 간단한 응용 예제를 통해 스택이 어떻게 활용될 수 있는지 살펴보았습니다. 스택은 매우 유용한 자료구조이므로, 다양한 상황에서 효과적으로 활용할 수 있습니다. 스택을 잘 이해하고 사용하면 더 나은 프로그램을 작성할 수 있을 것입니다.

반응형