Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 벡터 vs 배열: 벡터가 배열보다 나은 이유와 장단점 완벽 비교

C++ 프로그래밍에서 데이터를 저장할 때 가장 많이 고민되는 선택지가 바로 배열(Array)벡터(Vector)입니다. 두 자료구조는 비슷한 용도로 사용되지만, 그 성격과 활용 방식은 확연히 다릅니다.

벡터는 템플릿 클래스로 만들어진 C++ 전용 구조체인 반면, 배열은 언어에 내장된(built-in) 기능으로 C와 C++ 모두에서 사용할 수 있습니다. 또한 벡터는 리스트 인터페이스를 갖춘 동적 배열로 구현되어 있으며, 배열은 원시 데이터 타입 기반으로 정적 또는 동적으로 구현됩니다.

벡터와 배열의 주요 차이점

  • 벡터는 크기를 유연하게 늘릴 수 있는 동적 배열이지만, 일반 배열은 한 번 선언하면 크기를 변경할 수 없습니다.

  • 벡터는 reserve() 함수로 미리 메모리 공간을 예약할 수 있지만, 배열에는 예약 공간 개념이 없습니다.

  • 벡터는 하나의 클래스(class)이며, 배열은 기본 자료형(datatype)입니다.

  • 벡터는 다양한 타입의 객체를 저장할 수 있지만, 배열은 동일한 타입(homogeneous)의 값만 저장할 수 있습니다.

배열의 장점

  • 요소에 대한 빠르고 효율적인 임의 접근(random access)이 가능합니다.

  • 구조가 단순하여 정렬 작업이 쉽습니다.

  • 저장할 요소의 개수가 고정되어 있는 경우에 적합합니다.

배열의 단점

  • 한 번 생성된 요소를 삭제할 수 없습니다.

  • 실행 중에 크기가 변하는 동적 배열 생성이 어렵습니다.

  • 서로 다른 여러 데이터 타입을 함께 저장할 수 없습니다.

벡터의 장점

  • 크기가 자동으로 조절되므로 요소 추가 시 별도 처리가 필요 없습니다.

  • 다양한 타입의 객체를 저장할 수 있습니다.

  • erase(), pop_back() 등의 함수로 요소를 손쉽게 삭제할 수 있습니다.

예를 들어 벡터는 아래처럼 직관적으로 사용할 수 있습니다.

#include <vector>

std::vector<int> v = {1, 2, 3};
v.push_back(4);   // 크기가 자동으로 증가
v.pop_back();     // 마지막 요소 삭제

벡터의 단점

  • 벡터는 객체이기 때문에 순수 배열에 비해 메모리 소비량이 더 많습니다.

  • 내부적으로 재할당이 발생할 수 있어, 극도로 성능이 중요한 환경에서는 오버헤드가 될 수 있습니다.

정리

데이터 개수가 고정되어 있고 최대 성능이 필요하다면 배열이 적합하지만, 대부분의 상황에서는 크기 조절, 삽입·삭제 기능, 편리한 멤버 함수들을 제공하는 벡터가 더 안전하고 생산적인 선택입니다. 특히 메모리 관리 실수로부터 자유롭다는 점에서 현대 C++ 개발에서는 벡터 사용이 권장됩니다.