[C++][자료구조] vector

양영준·2025년 4월 1일

자료구조

목록 보기
1/8
post-thumbnail

📌 vector

<vector> 헤더 파일에 포함되어 있는 STL Container로 어떠한 자료형도 저장 가능한 동적 배열이다.

💿 특징

  1. vector에 저장된 요소는 연속된 메모리 공간에 위치하며, 요소 수가 증가함에 따라 메모리를 자동으로 관리한다.
  2. 어떤 요소에도 임의 접근 (Random Access) 이 가능하다.
  3. vector의 삽입 / 삭제는 맨 끝에서만 이루어진다.

💿 일반 배열과의 차이점?

  1. 동적으로 크기를 변경할 수 있다.
    => 자동으로 배열의 크기를 조절할 수 있다.
    => 유연하게 객체의 추가 / 삭제가 가능하다.
  2. 메모리를 효율적으로 관리할 수 있다.
  3. 예외처리가 쉽다.

💿 선언 방법

  1. vector의 크기를 결정하지 않는 경우 : vector <데이터 타입> 이름;
  2. vector의 크기를 결정하는 경우 : vector <데이터 타입> 이름 (vector 크기);
  3. vector의 크기 및 초기값을 결정하는 경우 : vector <데이터 타입> 이름 (vector 크기, 초기화 상수);
  4. 다른 vector와 동일한 크기 및 데이터를 가지는 vector를 생성하려는 경우 (vector를 깊은 복사 하려는 경우) : vector <데이터 타입> 이름 (복사할 vector의 이름);

💿 시간 복잡도

  1. 임의의 위치에 있는 원소에 접근 (Random Access) : O(1)
  2. 맨 뒤에 원소를 추가 / 제거 : O(1)
  3. 임의의 위치에 원소를 추가 / 제거 : O(n)

💿 capacitysize의 관계

vector에서 size와 capacity의 차이를 나타내는 그림

  • capacity : vector에 할당된 공간의 수를 의미한다.
  • size : vector에 실제로 들어있는 요소의 갯수를 의미한다.

sizecapacity 보다 커지는 경우, 현재 vector에는 capacity 이상의 요소를 저장할 수 없다.
현재 vector의 capacity 값보다 더 큰 갯수의 요소를 저장하려고 할 때, 새로운 메모리 공간을 다시 할당하고, 할당 받은 메모리에 vector의 기존 원소를 복사한 다음, 기존 메모리 공간을 해제하는 과정이 진행된다.

💿 vector 에서의 push_front

vector에서 push_front 동작은 배열의 모든 요소를 한 칸식 밀어 비워진 0번째 자리에 값을 넣는 형태로 진행된다.
이러한 일련의 과정의 시간 복잡도는 O(n)으로, vector의 장점인 빠른 속도를 살리지 못하여 vector의 사용 의미를 잃게 된다.
처음 or 임의의 위치에 원소를 추가 / 제거하는 동작이 빈번하게 일어나는 경우, vector의 사용을 지양할 것을 권장한다.


이미지 출처

모든 이미지 출처

profile
학습 내용 정리 순차적 갱신 / 정리 중

0개의 댓글