[STL] 2. stack

[STL] 2. stack

Tags
STL

Stack

  • std::stack는 STL에서 제공하는 stack 자료구조(LIFO 방식)의 컨테이너 어댑터이다.
  • 기본적으로 deque컨테이너를 사용하여 구현하고, vector나 list로도 가능하다.
  • deque는 이중 연결 리스트의 배열을 기반으로 구현되어 있다.
    [STL] 5. deque
  • 삽입과 삭제 모두 뒤에서 이루어진다.
  • 사용 시 <stack> 헤더를 추가해야 한다.

생성

stack<int> s;

멤버 함수

자주 사용되는 멤버 함수를 정리했다. 자세한 내용은 아래 사이트에서 볼 수 있다.

접근

stack<int> s; stack.top();
💡
스택은 컨테이너 어댑터로 이터레이터를 통해 접근이 불가능하고 stack::top()으로만 가능하다.

삽입

// 스택의 맨 뒤에 요소를 추가 s.push(value); // 스택의 맨 뒤에 요소를 생성하고 추가 s.emplace(10, "str");

push VS emplace

push는 요소를 맨 뒤에 삽입하고 emplace는 인수를 받아 요소를 생성한 뒤 맨 뒤에 삽입한다. vector의 emplace_back과 동작은 같지만 차이가 있다.
[STL] 1. vector
벡터는 증가할 때마다 요소의 복사 또는 이동이 발생하지만, 스택는 내부 컨테이너를 이용하여 요소를 관리하므로, 스택이 증가할 때 요소의 복사 또는 이동이 발생하지 않는다. 대신 내부 컨테이너의 emplace_back() 또는 비슷한 메서드가 호출된다.

삭제

// 스택의 맨 뒤 요소를 삭제 s.pop();

확인

// 스택이 비어있는지 확인, 비어있으면 true s.empty(); // 스택의 맨 위 요소를 반환 s.top(); // 스택의 크기를 반환 s.size();

조정

// 두 스택을 교환 s.swap(other);
💡
stack은 내부적으로 사용하는 컨테이너의 swap을 호출한다.