#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를 너무 크게 해놓으면 메모리 낭비가 될 수 있다.