[C++ STL] 정적배열과 Vector

yeonjuLee·2025년 4월 24일

코딩테스트 대비

목록 보기
23/32

배열

  1. 정적 배열 (Static Array): 고정된 크기를 가진 배열
  2. 동적 배열 (Dynamic Array): 가변적인 크기를 가진 배열

정적 배열

  • 고정된 크기의 저장 공간
  • 순차적으로 메모리에 저장됨
  • 인덱스를 통해 빠르게 원소 접근 가능 (O(1))
  • 크기 변경 불가능 (컴파일 시 크기 고정)

동적 배열 (vector)

  • 가변 크기의 저장 공간 (필요 시 자동으로 메모리 재할당)
  • 인덱스를 통한 원소 접근 가능 (O(1))
  • 새로운 배열을 생성해 복사 및 확장 필요 (resize 시)

❓ Q. 배열(vector)은 중간에 비어 있을 수 있나?

A. 아니요.vector에서 원소를 제거하면 뒤의 원소들이 자동으로 앞으로 당겨져, 중간에 빈 칸 없이 연속적인 구조가 유지됨.


정적 배열 vs 동적 배열 비교

기능시간 복잡도정적 배열 (int arr[])동적 배열 (vector<int>)
원소 접근O(1)arr[i] (인덱스)v[인덱스], v.at(인덱스)
길이 확인O(1)컴파일 시 고정v.size()
맨 뒤 삽입O(1)불가v.push_back(값)
맨 뒤 삭제O(1)불가v.pop_back()
중간 삽입O(n)구현v.insert(반복자, 값)
중간 삭제O(n)구현v.erase(반복자)
배열 복사O(n)memcpy, for문 등vector<int> v2 = v1;

❗️중간 삽입/삭제가 빈번한 경우, 더 적합한 자료구조로 변경해야함

상황추천 자료구조이유
중간 삽입/삭제 많음list (C++ STL)포인터 연결 기반이므로 중간 삽입/삭제 O(1) 성능을 제공
특정 값 탐색 + 삭제unordered_set or unordered_map탐색 + 삭제 평균 O(1) (해시 기반)
정렬된 상태 유지 + 중간 삽입/삭제set, map (balanced BST)자동 정렬, 탐색/삽입/삭제 O(log n) 성능을 제공

기타 자주쓰는 함수 (vector<int> 기준)

함수설명시간 복잡도
*sort(반복자, 반복자)전체 정렬 (오름차순 기본)O(n log n)
*reverse(반복자, 반복자)전체를 역순으로 정렬O(n)
front() / back()첫/마지막 원소 반환O(1)
empty()비어있는지 확인O(1)
swap(v2)두 벡터 내용 교환O(1)
begin() / end()첫/끝 원소 반복자 반환O(1)
rbegin() / rend()역방향 반복자 반환 (뒤에서부터 순회)O(1)

*algorithm 헤더 필요

0개의 댓글