std::vector와 std:array의 차이점

|

std::vector와 std::array

std::arrayC++11에서 새로 추가된 컨테이너로 예전부터 사용해오던 std::vector와 비슷하게 생각할 수 있지만 약간의 차이점이 있습니다.

둘의 차이는 다음과 같습니다.


차이점

항목 vector array
방식 인덱스 기반이 아닌 순차 데이터 저장 컨테이너 인덱스 기반의 fixed-sized의 데이터 저장 컨테이너
동적 크기 변경 가능 고정. 컴파일 시점에 크기 정해짐
메모리 조금 더 많이 사용 조금 더 적게 사용
데이터 접근 시간 조금 더 오래 걸림 조금 더 적게 걸림

vector가 내부적으로는 인덱스 기반으로 이루어져 있지는 않지만, 인덱스를 별도로 구성해서 제공하기 때문에, 인덱스를 이용한 접근이 가능합니다. 그리고 고정 크기가 아닌 가변 크기이기 때문에 인덱스를 별도로 동적으로 생성하기 때문에 array 보다는 성능이 조금 더 안 좋습니다. (물론, 대부분의 경우에는 큰 차이가 나지는 않습니다.)

vector에서 특정 요소에 인덱스를 이용해서 접근할 때 [ ] 또는 at() 함수를 이용해서 접근할 수 있습니다.

데이터 접근시에는 항상 at() 함수를 이용하는 것이 좋습니다. 만약 인덱스 범위를 벗어날 경우 at() 함수는 out_of_range 예외를 발생시켜 예외 처리를 가능하게 하지만, [ ]는 오류 없이 지나가서 오동작을 발생시켜 디버깅이 더 어렵게 만듭니다.