1. 개요
std::vector는 C++ STL에서 가장 널리 사용되는 동적 배열 컨테이너입니다. 요소를 연속된 메모리에 저장하며, 크기를 자동으로 조절할 수 있습니다.
#include <vector>
std::vector<int> v = {1, 2, 3, 4};
2. 주요 특징
- 동적 크기 조절 가능
- 연속된 메모리 저장 구조
- 임의 접근(random access) 가능
- 삽입/삭제는 끝에서 빠름, 중간/앞은 느림
- 반복자 무효화 주의 필요 (특히 삽입/삭제 시)
3. 주요 생성자
| 생성자 |
설명 |
vector() |
빈 벡터 생성 |
vector(size_type n) |
n개의 기본값 요소 생성 |
vector(size_type n, const T& val) |
n개의 val로 초기화 |
vector(InputIterator first, InputIterator last) |
범위 기반 초기화 |
vector(const vector& other) |
복사 생성자 |
4. 주요 멤버 함수
🔹 크기 관련
| 함수 |
설명 |
size() |
요소 수 |
capacity() |
할당된 용량 |
empty() |
비었는지 확인 |
resize(n) |
크기 변경 |
reserve(n) |
최소 용량 확보 |
shrink_to_fit() |
용량을 크기에 맞게 줄임 |
clear() |
모든 요소 삭제 |
🔹 접근
| 함수 |
설명 |
operator[], at(i) |
인덱스를 통한 요소 접근 |
front() / back() |
첫/마지막 요소 |
data() |
내부 배열 포인터 반환 |
🔹 삽입/삭제
| 함수 |
설명 |
push_back(val) |
끝에 요소 추가 |
pop_back() |
끝 요소 제거 |
insert(pos, val) |
특정 위치에 삽입 |
erase(pos) |
특정 위치 제거 |
emplace(pos, args...) |
위치에 직접 생성 |
emplace_back(args...) |
끝에 직접 생성 |
assign() |
새로운 값으로 전체 초기화 |
swap() |
두 벡터 교환 |
5. 반복자 관련
| 함수 |
설명 |
begin() / end() |
정방향 반복자 |
rbegin() / rend() |
역방향 반복자 |
cbegin() / cend() |
const 반복자 |
6. 예제 코드
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> vec = {1, 2, 3};
vec.push_back(4);
vec.insert(vec.begin(), 0);
for (int v : vec) {
cout << v << " ";
}
cout << endl;
vec.erase(vec.begin() + 2);
vec.pop_back();
for (int v : vec) {
cout << v << " ";
}
cout << endl;
return 0;
}
7. std::vector vs std::list
| 항목 |
std::vector |
std::list |
| 메모리 |
연속적 |
비연속적 |
| 접근 |
빠름 (임의 접근 가능) |
느림 |
| 삽입/삭제 |
끝은 빠름, 중간은 느림 |
어디서든 빠름 |
| 메모리 오버헤드 |
적음 |
많음 |
8. 주의사항
- 중간 삽입/삭제 시 반복자 무효화 발생
at()은 범위 체크하며, []는 하지 않음
- 성능상 많은 삽입/삭제가 필요한 경우
list, deque 고려
Comments