목차

C++ Standard Library

vector

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할 때 필요는 없기 때문에 궁금하신 분들만 읽어보세요.

stack

https://en.cppreference.com/w/cpp/container/stack.html

먼저 넣은 값이 나중에 나오는 First In Last Out(FILO) / Last In First Out(LIFO) 자료구조입니다.

image.png