상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - C++에서 std::stack의 사용법은?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
`std::stack`은 C++ 표준 라이브러리에서 제공하는 컨테이너 어댑터로, LIFO(Last In, First Out) 구조를 구현합니다. 즉, 가장 나중에 추가된 요소가 가장 먼저 제거되는 구조입니다. `std::stack`은 기본적으로 다른 컨테이너(예: `std::deque`, `<a href='https://sangseek.com/sangseeks/std::vector/ko'>std::vector</a>`, `std::list`)를 기반으로 하여 동작할 수 있으며, 기본적으로 `std::deque`를 사용합니다. 기본 사용법 `std::stack`을 사용하기 위해서는 `<stack>` 헤더 파일을 포함해야 합니다. ```cpp include <iostream> include <stack> ``` 스택 생성 스택을 생성할 때는 <a href='https://sangseek.com/sangseeks/기본 생성자/ko'>기본 생성자</a>를 사용합니다. 다음은 `int` 타입의 스택을 생성하는 예입니다. ```cpp std::stack<int> myStack; ``` 요소 추가 스택에 요소를 추가할 때는 `push()` 메서드를 사용합니다. ```cpp myStack.push(10); myStack.push(20); myStack.push(30); ``` 요소 제거 스택에서 요소를 제거할 때는 `pop()` 메서드를 사용합니다. 이 메서드는 스택의 가장 위에 있는 요소를 제거합니다. ```cpp myStack.pop(); // 30이 제거됨 ``` 최상위 요소 접근 스택의 최상위 요소를 확인할 때는 `top()` 메서드를 사용합니다. 이 메서드는 스택의 가장 위에 있는 요소를 반환하지만, 제거하지는 않습니다. ```cpp std::cout << "Top element: " << myStack.top() << std::endl; // 20이 출력됨 ``` 스택의 크기 확인 스택에 현재 몇 개의 요소가 있는지 확인하려면 `<a href='https://sangseek.com/sangseeks/size/ko'>size</a>()` 메서드를 사용합니다. ```cpp std::cout << "Stack size: " << myStack.size() << std::endl; // 2가 출력됨 ``` 스택이 비어 있는지 확인 스택이 비어 있는지 확인하려면 `empty()` 메서드를 사용합니다. 이 메서드는 스택이 비어 있으면 `true`, 그렇지 않으면 `false`를 반환합니다. ```cpp if (myStack.empty()) { std::cout << "Stack is empty." << std::endl; } else { std::cout << "Stack is not empty." << std::endl; } ``` 전체 예제 아래는 `std::stack`의 기본적인 사용법을 보여주는 전체 예제입니다. ```cpp include <iostream> include <stack> int main() { std::stack<int> myStack; // 요소 추가 myStack.push(10); myStack.push(20); myStack.push(30); // 최상위 요소 출력 std::cout << "Top element: " << myStack.top() << std::endl; // 30 // 스택 크기 출력 std::cout << "Stack size: " << myStack.size() << std::endl; // 3 // 요소 제거 myStack.pop(); // 30 제거 // 최상위 요소 출력 std::cout << "Top element after pop: " << myStack.top() << std::endl; // 20 // 스택 크기 출력 std::cout << "Stack size after pop: " << myStack.size() << std::endl; // 2 // 스택이 비어 있는지 확인 if (myStack.empty()) { std::cout << "Stack is empty." << std::endl; } else { std::cout << "Stack is not empty." << std::endl; // 출력됨 } return 0; } ``` 주의사항 1. 예외 처리 : `top()`이나 `pop()` 메서드를 호출할 때 스택이 비어 있으면 정의되지 않은 동작이 발생할 수 있습니다. 따라서 이러한 메서드를 호출하기 전에 `empty()` 메서드로 스택이 비어 있는지 확인하는 것이 좋습니다. 2. 컨테이너의 선택 : `std::stack`은 기본적으로 `std::deque`를 사용하지만, 다른 컨테이너를 사용할 수도 있습니다. 예를 들어, `std::vector`를 사용하려면 다음과 같이 할 수 있습니다. ```cpp std::stack<int, std::vector<int>> myStack; ``` 3. 복사 및 이동 : `std::stack`은 복사 생성자와 <a href='https://sangseek.com/sangseeks/이동 생성자/ko'>이동 생성자</a>를 지원합니다. 따라서 스택을 다른 스택으로 복사하거나 이동할 수 있습니다. 이와 같이 `std::stack`은 간단하고 직관적인 인터페이스를 제공하여 LIFO 구조를 쉽게 구현할 수 있도록 도와줍니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기