목차
https://en.cppreference.com/w/cpp/container/vector.html
정적 배열과 같은 기능( $O(1)$에 임의 위치 접근/변경 등등)을 가집니다.
그러나, 정적 배열과 달리 크기를 늘릴 수 있습니다.
주의할 점으로, 벡터의 크기가 변경될 일이 있을 경우에는 각 값의 주소를 가지고 있으면 안 됩니다.
즉, 다음과 같은 코드는 매우 위험하며, 의도대로 동작하지 않고 segfault를 발생시킬 수 있습니다.
vector<int> arr(3, 0);
int *ptr = &arr[0];
for(int i = 0; i < 10; i++) arr.push_back(i);
cout << *ptr;
주소 대신에 인덱스를 사용하세요. 포인터는 8바이트고 int는 4바이트이므로 메모리도 덜 먹습니다.
벡터의 구현 방법을 알고 있으면 segfault가 나는 이유를 알 수 있으나, ps할 때 필요는 없기 때문에 궁금하신 분들만 읽어보세요.
https://en.cppreference.com/w/cpp/container/stack.html
먼저 넣은 값이 나중에 나오는 First In Last Out(FILO) / Last In First Out(LIFO) 자료구조입니다.
