본문 바로가기
Language/C++

Vector - Array와의 차이점과 쓰임새

by W00gie 2021. 1. 22.

최근 STL을 공부하며 알고리즘 문제풀이 시에 Vector를 유용하게 사용하고 있다. Vector는 임의 접근 반복자를 지원하는 배열 기반의 컨테이너이다. 하지만 앞으로 Array와 Vector에 대해서 명확히 구분을 해 사용하고 싶어,이번 포스팅은 두 가지를 비교해보는 글을 작성해 보았다.

 

  Array Vector
타입 기본적 자료구조 STL 컨테이너
메모리 선언시 메모리 고정됨 메모리 재할당 용이
접근방식 Index 기반 랜덤접근 Iterator 기반 랜덤접근
접근속도 빠름 느림 ( 포인터를 통한 접근이기 때문)

*랜덤접근 (Random Access)

무작위가 아닌 어디로든 똑같은 시간으로 접근 가능하다는 의미로서, 메모리의 주소만 알고 그곳을 지정하면 별다른 지연 없이 바로 접근할 수 있다는 의미

 

Vector를 사용해야 할 케이스

 

1. 저장할 데이터 개수가 가변적인 경우
배열과 vector의 가장 큰 차이점은 ‘배열은 크기가 고정이고 vector는 크기가 동적으로 변한다’입니다. 저장할 데이터 개수를 미리 알 수 없다면 vector를 사용 하는 편이 좋습니다.

2. 저장할 데이터 개수가 적거나 많은 경우 빈번하게 검색하지 않는 경우
데이터를 순차적으로 저장하므로 많은 데이터를 저장한다면 검색 속도가 빠르지 않습니다. 검색을 자주한다면 map이나 set, hash_map을 사용해야 합니다.

3. 데이터 접근의 랜덤 액세스가 필요한 경우

위치를 알고 있다는 전제하에 랜덤 액세스 가능.

 

4. 중간에 데이터 삽입이나 삭제가 일어나지 않는 경우

배열 기반 컨테이너 이기 때문에 push_front()와 pop_front()는 지원하지 않는다.

*vector 에서 매우 비효율적으로 동작

임의의 원소를 제거하고도 인덱스를 그대로 유지하려면 뒤에 있는 원소들을 전부 앞으로 당겨와야하기 때문이다.

 

+) 주의사항

 

Vector가 동적인 메모리 할당을 지원하지만 상당한 비용이 필요하다.

한 번에 메모리를 할당학 사용할 수 있는 reserve() 함수의 이용을 습관화 할 것.

 

 

참고 :

www.hanbit.co.kr/channel/category/category_view.html?cms_code=CMS7393457320 한빛 출판네트워크

뇌를 자극 하는 C++ STL - 한빛 미디어