// 배열을 한 개 생성하여, 배열로 vector를 초기화한다.
bool bArrary[] = {true, true, true, true, false};
vector<bool> vecArray( bArrary, bArrary+sizeof(bArrary)/sizeof(bArrary[0]) );
참 간단하다. 실제로 위의 코드가 작동되는 원리를 파악해 보자.
# 설 명
vector.h 파일을 살펴보면 vector를 초기화하는 코드 중에 다음과 같은 생성자가 있다.
template<class _Iter> vector(_Iter _First, _Iter _Last)
{
// 이하 생략
...
인자 값으로 특정 STL 컨테이너 반복자(iterator)의 시작 위치와 끝 위치를 넣어 데이터를 담을 수 있다. 예를 들어 a라는 vector 컨테이너의 데이터를 vecArrary라는 또 다른 컨테이너에 전부 넣어 초기화를 하고 싶다면 다음과 같이 처리할 수 있다.
vector<bool> vecArrary( a.begin(), a.end() ); // vecArrary를 a 요소 값으로 담는다.
그렇다면 반복자라는 것은 무엇일까?
반복자 iter가 있다고 가정했을 때, 흔히 컨테이너를 순회하려면 ++iter 와 같이 ++연산자를 사용하여 현재 반복자가 어느 데이터를 가리키고 있는지 알 수 있다. 이처럼 반복자를 증가시켜 현재 가리키고 있는 데이터의 위치를 알 수 있듯이, 1컨테이너 안의 데이터들은 메모리 블록에 차례대로 쌓아놓게 되는 것이다. 즉, 반복자는 특정 컨테이너에서 해당 데이터의 메모리 위치를 가리키게 된다.
마찬가지로 배열 또한 데이터를 메모리 블록에 차례대로 쌓아놓아, 배열의 시작 주소부터 끝 주소까지 넣으면 그 값으로 컨테이너를 생성하게 되는 것이다.
# 정 리

vector를 생성할 때 초기화 함수 vector(_Iter _First, _Iter _Last) 의 값으로 데이터의 시작 주소와 끝 주소를 넣어주면 해당 데이터를 vector에 담게 된다. 마찬가지로 동일한 Sequence container인 배열 또한 시작 주소와 끝 주소를 넣어서 데이터를 vector에 담을 수 있다. 배열과 vector의 데이터가 메모리 주소값에 차례대로 있어서 가능한 일이다.
# 참고자료
위키피디아의 STL(Standard Template Library) 정보
다양한 기능을 제공하는 C++ 확장 라이브러리 Boost


