std::array
는 C array의 단순 클래스버전이라고 할 수 있습니다. 크기는 컴파일타임에 고정되고 하나의 연속적인 메모리 공간에 할당되도록 동작합니다. 힙 메모리가 아닌 스택 메모리를 사용하므로 대용량 메모리를 사용하기에는 부적절합니다. 장점이라면 객체와 데이터 사이의 간접참조(포인터)가 없으므로 vector
에 비해 약간 더 빠를 수 있습니다.
std::vector
는 힙 메모리 포인터가 포함된 클래스입니다. std::vector
를 선언하면 내부적으로 new
를 호출합니다. 포인터로 접근하므로 데이터 접근시 한번 더 거쳐서 데이터에 접근합니다. 장점이라면 배열의 크기를 동적으로 재조정할 수 있는 점입니다. std::vector
도 std::array
와 마찬가지로 연속된 메모리를 보장하므로 &vec[0]
을 반환하여 접근하게 하는 것도 가능합니다.
대체로 스택메모리 공간 안에서 처리할 수 있는 작은 크기의 배열이라면 std::array
를, 어느 정도 큰 크기의 배열이라면 std::vector
를 선택하는 것이 좋을 것이라고 생각합니다.