개발 지식/C,C++

[C++] 벡터, 스택, 큐 사용법과 차이

Prcnsi 2023. 5. 2. 16:34
728x90

C++에서 벡터, 스택, 큐는 C++의 모두 STL Library에 들어있으며 각각 <vector>,<stack>,<queue> 헤더파일을 include해서 사용할 수 있다. 

 

 

스택과 큐는 벡터를 응용한 개념이고 
스택과 큐 둘 다 push()는 원소 추가, pop()은 원소 제거

stack pop(): 제일 뒤의 원소 제거
queue pop(): 제일 앞의 원소 제거

스택은 먼저 들어간게 먼저 나옴 (FIFO, First In First Out)
스택은 top()으로 가장 위에 있는 원소를 출력할 수 있고

큐는 먼저 들어간게 나중에 나오고 (LIFO, Last In First Out)
큐는 front()로 제일 아래에 있는 원소를 출력하고, back()으로 가장 위에(나중에 들어간) 원소를 출력함

대괄호([])를 통해 원소의 접근이 불가능하고 
front()가 맨 앞의 원소, back()이 맨 뒤의 원소

원소를 추가하거나 제거하는 작업 (insert(), erase()는 시간 복잡도가 O(n)이다.
스택과 큐는 []로 원소 접근이 불가능하고 top()으로 제일 마지막에 있는 원소를 접근할 수 있다. 

 

#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <algorithm>
#include <stack>

using namespace std;
int main() {
	/*vector<int> v;
	vector<string> nameList;
	// 벡터 인덱싱은 배열과 마찬가지로 대괄호 [] 사용
	v.push_back(1);
	v.push_back(3);
	v.push_back(5);
	v.push_back(7);
	v.push_back(9);

	nameList.push_back("jiseon");
	nameList.push_back("Dabin");
	nameList.push_back("Hyeri");
	nameList.push_back("jimin");

	// ====================================================================
	//  벡터를 출력하는 두 가지 방법 (벡터의 원소 출력은 모두 Iterator를 사용해야함.)dcdc
	//  1) iterator로 벡터 사용
	// 	2) iterator로 숫자(int)사용
	// ====================================================================

	// iterator로 벡터 사용은 담는 자료형도 따로 선언한 벡터여야함.
	vector<string>::iterator iter;
	cout << "[iterator 벡터로 출력]" << "\n";
	for (iter = nameList.begin(); iter < nameList.end(); iter++) {
		cout << *iter << ' '; // 출력시에도 대괄호가 아닌 *(iterator 형식) 
	}
	
	cout << "\n[iterator 숫자로 출력]" << "\n";
	for (int i = 0; i < v.size(); i++) {
		cout << v[i] << ' ';
	}*/

	stack<char> s;
	s.push('h');
	s.push('e');
	s.push('l');
	s.push('l');
	s.push('o');

	cout << "I am stack" << '\n';
	for (int i = 0; i < 5; i++) {
		cout << s.top() << ' ';
		s.pop();
	}

	queue<char> n;
	n.push('j');
	n.push('i');
	n.push('s');
	n.push('e');
	n.push('o');
	n.push('n');
	cout << "\nI am queue " << '\n';
	for (int i = 0; i < 6; i++) {
		cout << n.front() << ' ';
		n.pop();
	}

	return 0;
}
728x90