벡터 (STL)

벡터(std::vector)는 동적 배열 구조를 C++로 구현한 것이다. 이것은 C의 배열(빠른 랜덤 접근이 가능한)처럼 행동하지만 자동으로 배열의 크기 조절과 객체의 추가와 삭제가 가능하다.

벡터는 C++ 표준 템플릿 라이브러리 중의 하나인 템플릿 클래스이다. 어떤 타입이라도 저장할 수 있지만, 한 번에 한 타입만 저장이 가능하다. 요소에 접근하거나, 앞 또는 뒤에 요소를 추가하거나 삭제할 수 있고 크기를 알 수 있는 멤버 함수를 제공하고 있다.

배열과의 차이점 
C++의 배열은 메모리에서 연속적이다. 이것은 하나의 타입을 가지는 블록이 여러 개가 붙어 있는 것처럼 생각할 수 있다. 배열의 모든 요소는 같은 타입을 가져야만 한다.

벡터는 배열과 비슷하지만 확장된 기능을 가지고 있다. 벡터의 특징 중 하나는 at()이란 함수를 사용한다면, 존재하지 않는 요소에 접근하려 할 때 범위 에러를 발생할 것이다. 벡터는 템플릿 클래스이기 때문에, 원하는 모든 타입의 일반적인 배열(generic array)을 만들 수 있다. 이것은 벡터의 유용성을 매우 크게 하기 때문에, 모든 것을 배열처럼 사용할 수 있게 한다. 예를 들어, 벡터의 벡터를 만들 수 있다.

벡터는 무조건 데이터를 선형적으로 만들려고 한다. 만약 저장 공간보다 많은 양의 데이터를 추가시킬 경우에는, 현재 보유하고 있는 메모리의 두 배만큼을 할당하기 때문에 단순한 추가 할당으로는 선형적인 공간을 만들어내지 못하는 경우가 있을 수 있다. 이럴 때는 선형적인 다른 공간에 모든 원소를 하나하나 복사하기 때문에 속도가 느려진다.

새 표준 C++0x에서의 개선 
기존 표준에서 백터의 길이가 늘어날 적엔 위에서 서술한 것처럼 본래 있던 벡터에 비해 길이가 두 배인 선형적인 다른 공간에 모든 원소를 하나하나 복사하기 때문에 속도가 느렸다. 하지만 새 표준 C++0x 표준에선 부하가 큰 복사가 아닌, 메모리 상에서의 이동이 이뤄져, 성능에 비약적인 발전이 이뤄졌다. 이는 C++0x 표준에서 새롭게 지원된 기능인 우측 값 참조(r-value references)를 사용한 것이다.

C++ 표준 라이브러리