언어/Basic C++

[Basic C++] #64_stack

Hardii2 2023. 4. 3. 12:01

 

[Basic C++] #64_stack

 

C++에서 제공하는 stack 클래스에 대해 알아보겠습니다.

 


 

Overview

 

  1. 개념
  2. 선언
  3. 멤버 함수
  4. 예제

 

#0. 개념

1. Stack

  • C++에서 제공하는 stack은 LIFO 데이터 구조를 구현하는 STL 컨테이너입니다.
  • stack은 기본적으로 컨테이너의 가장 뒤쪽에서만 데이터를 삽입하고 삭제합니다.

 

#1. 선언

1. 헤더

#include <stack>

 

2. 선언 및 초기화

#include <iostream>
#include <stack>
using namespace std;

int main()
{

	// #0. 빈 스택 선언
	stack<int> s1;

	// #1. 기존 배열을 활용한 초기화
	int arr[] = { 1, 2, 3, 4, 5 };
	int n = sizeof(arr) / sizeof(arr[0]);
	stack<int> s2(deque<int>(arr, arr + n));

	return 0;
}

 

#2. 멤버 함수

1. 접근

#include <iostream>
#include <stack>
using namespace std;

int main()
{

	stack<int> s;

	s.push(1);
	s.push(2);

	cout << s.top() << endl;

	return 0;
}

 

Details

 

  • stack은 Random Access가 불가능한 컨테이너입니다. 스택은 LIFO 데이터 구조를 구현하며, 가장 나중에 들어온 항목을 top() 함수를 통해 접근한 방법이 유일합니다.

 

2. 삽입, 제거

#include <iostream>
#include <stack>
using namespace std;

int main()
{

	stack<int> s;

	s.push(1);

	s.pop();

	return 0;
}

 

Details

 

  1. stack 컨테이너에 새로운 항목을 삽입하는 방법은 push()입니다.
  2. stack 컨테이너에 마지막 삽입된 항목을 제거하는 방법은 pop()입니다.

 

3. 그 외 함수들

#include <iostream>
#include <stack>
using namespace std;

int main()
{

	stack<int> s;
	stack<int>s2;

	s.push(1);
	s.push(2);
	s.push(3);

	s2.push(4);
	s2.push(5);
	s2.push(6);

	// #0. size()
	cout << s.size() << endl;

	// #1. empty()
	cout << s.empty() << endl;

	//#2. swap()
	s.swap(s2);

	return 0;
}

 

Details

 

  1. size() 함수는 stack에 들어있는 항목의 개수를 반환합니다.
  2. empty() 함수는 stack이 비어있는지 여부를 반환합니다.
  3. swap() 함수는 서로 다른 두 스택 컨테이너를 바꿉니다.