티스토리 뷰

이 글은 Vector와 Array  대해 다루겠습니다. 전체적인 내용은 eduCBA, cplusplus.com 등을 정리했습니다. 공부한 것을 정리하는 형식으로 작성되었으므로 오류가 있을 수 있습니다. 오류 발견시 댓글로 꼭 말씀해주세요! 시작해볼까요?

알고리즘 문제를 풀다보면 동적으로 원소들을 넣었다 뺐다 하는 경우가 많기 떄문에 거의 무조건적으로 vector를 쓰곤 합니다. 그래도 생각해 보면 배열을 또 아주 쓰지 않는 것은 또 아닙니다. 대학교에서 시험을 보기 위해서 공부 하던 당시 vector는 자료 접근을 자주 할 때 쓰지 않는 것이 좋다고 했던 기억이 아주 어렴풋이 있는데 그래도 뚜렷한 구분을 할 필요성은 느낍니다. (사실 프로그래머스의 이 모의고사 문제는 배열로 풀었어도 큰 무리는 없었을 문제입니다.) 구글에 difference between vector array라던가 c++ vector array 라던가 vector array comparison과 같이 키워드 쳐봤자 나오는 사이트들은 다 비슷비슷하니까 조금 취합해서 정리를 해보겠습니다.

1. 간략 비교 & 설명

  Vector Array
생성 (Creation) 요소들을 순차적으로 저장할 수 있는 컨테이너 인덱스 기반 기본 자료구조
메모리 (Memory) 배열 보다 메모리 공간 더 차지 메모리 효율성 높음
길이 (Length) 동적으로 달라질 수 있음 고정된 길이
사용 (Usage) 요소의 삽입과 삭제가 빈번하게 발생 요소에 접근이 빈번하게 발생
크기 조정 (Resize) 동적으로 이루어짐 비용이 많이 듬
구조 (Structure) Template 클래스 연속적인 메모리 공간
인덱싱 (Indexing) 인덱스 기반 아님 인덱스 기반, 가장 낮은 주소가 첫 번째를 지칭하고 가장 높은 주소가 마지막 원소를 지칭
접근 (Access) 위치에 기반하더라도 요소에 접근하는 것은 시간 소모적 요소의 위치에 무관하게 접근에 걸리는 시간은 일정함

Vector와 Array는 각기 다른 능력을 가졌고 데이터 저장도 다른 방식으로 하기 때문에 각자만의 방식으로 독특하다고 할 수 있습니다. Array크기가 고정되어 있어 있어서 요소들을 삽입하거나 삭제할 수 없고, 그 요소들은 모두 같은 자료형을 갖습니다. 그렇기 때문에 C++의 배열은 type safe하고 속도나 성능적인 면에서 가장 효율적인 선형 자료구조라고 할 수 있습니다. (다중 배열도 지원함) 배열은 요소들에 직접 접근(direct access)도 할 수 있고 순차적 접근(sequential access)도 할 수 있습니다.

Vector는 근본적으로 동적인 성격을 띄기 때문에 빈번하게 요소들의 삽입 삭제가 이루어질 때 자동적으로 크기를 조절합니다. 힙 메모리로의 포인터를 가지고 있는 template class이기 때문에 std::vector가 호출 될 때마다 'new'가 함께 호출됩니다. Vector도 물론 순차적이지만 요소로의 접근을 포인터로 하기 때문에 속도 측면에서는 느릴 수 밖에 없습니다. Vector의 요소들이 연속적인 메모리 블록에 저장되어 있기 때문에 iterator를 사용해서 쉽게 살펴볼 수 있다는 장점이 있습니다.

donaricano-btn

'CS > 알고리즘' 카테고리의 다른 글

[SWEA] D3 : 6190, 6057, 6019, 5986  (0) 2019.07.24
[SWEA] D3 : 6730, 6718, 6692, 6485  (0) 2019.07.17
[SWEA] D2 : 1970, 1979, 1974, 1983  (0) 2019.06.16
[SWEA] D2 : 1859, 1948, 1959, 1966  (0) 2019.06.16
[SWEA] D2 : 1285, 1288, 1976, 1945  (0) 2019.06.15
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함