Nagie's DevStory

[STL] 05. std::stack 본문

Programming/STL

[STL] 05. std::stack

Nagie 2023. 10. 29. 23:49
728x90

std::stack은 C++ 표준 라이브러리(STL)에서 제공하는 스택 자료구조를 구현한 클래스다.

스택은 후입선출 (LIFO, Last-In-First-Out) 방식으로 데이터를 관리하는 자료구조로 std::stack 역시 이러한 동작을 한다.

다음은 std::stack의 주요 특징과 사용법이다.

 

 

특징

 

1. 표준 라이브러리의 일부 : std::stack은 C++ STL의 일부이며 <stack> 헤더에 정의되어 있다.

 

2. 스택의 기능 제공 : std::stack은 스택 자료구조의 기능을 제공한다.

즉 데이터를 스택에 넣는(push) 동작과 스택에서 데이터를 빼내는(pop) 동작을 지원한다.

 

3. 컨테이너 어댑터 : std::stack은 다른 시퀀스 컨테이너를 내부적으로 사용해 스택을 구현한다.

따라서 스택의 특성을 그대로 유지하면서 다양한 컨테이너를 사용할 수 있다.

 

 

사용법

 

#include <iostream>
#include <stack>

int main() {

	std::stack<int> stk;

	stk.push(10);	// 10
	stk.push(20);	// 20 <- 10
	stk.push(30);	// 30 <- 20 <- 10
	stk.push(40);	// 40 <- 30 <- 20 <- 10

	stk.pop();	// 30 <- 20 <- 10

	std::cout << stk.top() << std::endl;	// 30

	if (stk.empty()) { //스택이 비었다면 아래의 메시지를 출력

		std::cout << "isEmpty" << std::endl;
	}
}

 

 

 

스택의 주요 멤버 함수와 기능

 

멤버 함수 설명 시간 복잡도

push()

스택에 요소를 추가 O(1)

pop()

스택 맨 위의 요소를 제거 O(1)

top()

스택 맨 위의 요소를 참조 O(1)

empty()

스택이 비어 있는지 확인 O(1)

size()

스택에 저장된 요소의 수를 반환 O(1)

 

std::stack은 컨테이너 어댑터이므로 실제 데이터 저장에는 다른 시퀀스 컨테이너를 사용하며

시간 복잡도는 주로 내부 컨테이너의 동작에 의해 결정된다.

이는 스택 자체의 동작은 O(1)에 수행되지만, 내부 컨테이너에 따라 추가적인 오버헤드가 발생할 수 있음을 의미하며

보통은 std::deque를 내부 컨테이너로 사용하는 경우가 일반적이기에

위의 표에선 std::deque를 내부 컨테이너로 사용한다는 전제 조건으로 시간 복잡도를 작성했다.

728x90
Comments