7.11 std::vector를 스택처럼 사용하기
#include <iostream>
#include <array>
#include <vector>
using namespace std;
int main(){
std::vector<int> v{1,2,3};
v.resize(2);
for (auto &e : v)
cout << e << " ";
cout << "\n";
cout << v.size() << " "<< v.capacity() <<"\n"; // 2,3
cout << v[2] <<"\n";
int *ptr = v.data();
cout << ptr[2] << "\n";
return 0;
}
std::vector는 속도를 높이기 위해서 resize로 size를 줄이더라도 메모리를 삭제하진 않는다. 그래서 vector에 담겨있던 메모리는 capacity에 남아있게 된다.
v.reserve()
-> size는 그대로, capacity 메모리 크기만 확보. -> 다른 데이터가 들어와도 capacity를 줄이거나 늘리는 작업이 없어지기 때문에 빨라짐.
void printStack(const std::vector<int> &stack){
for (auto &e : stack)
cout << e << " ";
cout << endl;
}
int main(){
std::vector<int> stack;
stack.push_back(3);
printStack(stack);
stack.push_back(5);
printStack(stack);
stack.push_back(7);
printStack(stack);
stack.pop_back();
printStack(stack);
}
reserve()로 capcity를 확보해놓으면 push_back을 할 때 new,delete을 호출할 필요가 없어서 속도가 늘고, pop_back()을 할 때도 size만 줄이기 때문에 속도가 빨라진다. reserve를 너무 크게 해놓으면 메모리 낭비가 될 수 있다.