티스토리 뷰
이 글은 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를 사용해서 쉽게 살펴볼 수 있다는 장점이 있습니다.
'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
- OS
- 부캠
- 삼성소프트웨어아카데미
- 소프트웨어아카데미
- 알고리즘
- 소프트웨어역량시험
- 운영체제
- RxSwift
- nosql
- 코테
- 컴공졸작
- 개발자인턴
- swacademy
- 졸업작품
- ios
- 커넥트재단
- 인턴
- SWIFT
- 프로그래머스
- C++
- TableView
- 보안
- 컴퓨터공학
- 삼성
- 부스트캠프2020
- 코딩테스트
- firebase
- 부스트캠프
- 데이터분석
- 컴과졸작
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |