개발 지식/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