작성 : 202422040 김민석
std::vector
는 STL의 동적 배열 컨테이너로, 크기가 가변적인 배열을 구현할 수 있다.
주요 특징
-
동적 배열
std::vector
는 저장할 요소의 개수가 고정된 배열과 달리, 요소를 추가하거나 제거할 때 자동으로 크기가 조정된다.
-
메모리 관리
내부적으로 동적 메모리를 관리하므로, 사용자는 명시적으로 메모리를 할당하거나 해제할 필요가 없다. 그러나 std::vector
는 메모리를 재할당하고, 자동으로 메모리를 정리하는 과정에서 불필요한 자원이 낭비될 수 있다.
주요 함수
- 생성
- vector<type> name : 빈 벡터 생성
- name(n, value) : 크기
n
과 초기값 value
로 채운 벡터 생성
- 크기 조정 및 확인
- O(1) | name.size() : 현재 요소 개수 반환
- O(1) | name.capacity() : 벡터의 할당된 메모리 크기 반환
- O(n) | name.resize(n) : 벡터 크기를
n
으로 조정
- 요소 접근
- O(1) | name[i] : 지정된 인덱스의 요소에 접근
- O(1) | front() : 첫 번째 요소 반환
- O(1) | back() : 마지막 요소 반환
- 요소 수정
- O(1) | name.push_back(value) :
value
를 벡터의 끝에 추가
- O(1) | name.pop_back() : 벡터의 마지막 요소 제거
- O(n) | name.insert(name.iterator, arr.begin, arr.end) : 특정 위치에 요소 삽입
- O(n) | erase(begin, end+1) : 특정 위치 또는 범위의 요소 제거
- 반복자(iterator)
- O(1) | name.begin() : 벡터의 시작을 가리키는 반복자 반환
- O(1) | name.end() : 벡터의 끝 + 1을 가리키는 반복자 반환
- O(1) | name.rbegin() : 벡터의 끝을 가리키는 반복자 반환
- O(1) | name.rend() : 벡터의 시작 - 1을 가리키는 반복자 반환
장점
- 배열보다 유연하고 메모리 관리가 쉬움
- 다양한 함수와 STL과의 호환성
단점
- 크기 조정 시 메모리 재할당으로 인한 낭비 발생 가능
- 메모리 사용량이 일반 배열보다 많을 수 있음