벡터 자료구조는 배열(Array)과 유사한 자료구조로, 연속된 메모리 공간에 원소들을 저장하는 자료구조입니다. 일반적으로 동적 배열(Dynamic Array)로 구현되며, 크기를 동적으로 조정할 수 있습니다. 다양한 프로그래밍 언어에서 지원되며, C++의 std::vector
, Python의 list
, Java의 ArrayList
등이 벡터 자료구조를 지원합니다.
벡터 자료구조의 주요 특징은 다음과 같습니다:
동적으로 요소를 할당할 수 있는 동적 배열입니다.
중복을 허용하고 순서가 있고 랜덤 접근이 가능합니다.
탐색과 맨 뒤의 요소를 삭제하거나 삽입하는 데 O(1)이 걸리며, 맨 뒤나 맨 앞이 아닌 요소를 삭제, 삽입하는 데 O(n)의 시간이 걸립니다.
push_back()을 할 때 매번 크기가 증가하는 것이 아니라 공간이 꽉차면 2의 제곱승 + 1 마다 크기를 2배로 늘립니다.
ex) 1, 3, 5, 9, 17번 째에 공간을 2배 확장합니다.
순서 | 용량 | 비용 |
---|---|---|
push_back(1) | 1 | 1 |
push_back(2) | 2 | 1+1 |
push_back(3) | 4 | 2+1 |
push_back(4) | 4 | 1 |
push_back(5) | 8 | 4+1 |
push_back(6) | 8 | 1 |
push_back(7) | 8 | 1 |
push_back(8) | 8 | 1 |
push_back(9) | 16 | 8+1 |
※ 비용 : i번째 push_back()할 때 드는 비용, 공간이 확장 될때 마다 새로운 메모리 위치에 복사가 일어나므로 비용이 기존 들어있던 용량+1 만큼 든다.