더북(TheBook)

2.3.4 vector 컨테이너에서 반복자 사용하기

예상했겠지만 vector 컨테이너에는 const 반복자, non-const 반복자, 역방향 반복자를 비롯해 다양한 반복자를 반환하는 함수 멤버가 준비되어 있다. vector의 반복자는 랜덤 액세스 반복자이므로 전역 함수를 이용해서도 이들 반복자를 얻을 수 있다. vector에는 push_back() 함수가 있으므로 새 원소를 뒤에 추가할 때 back_insert_iterator를 사용할 수 있다. back_inserter() 전역 함수를 호출해도 back_insert_iterator를 얻을 수 있다. front_insert_iteratorvector 컨테이너에 쓸 수 없다. front_insert_iterator를 쓰려면 push_front() 함수 멤버가 필요한데, vector 컨테이너에는 push_front() 멤버가 정의되어 있지 않기 때문이다.

back_insert_iteratorvector에 어떻게 적용하는지 copy() 알고리즘으로 원소를 추가하면서 설명할 수 있다. copy() 알고리즘은 처음 두 반복자로 원소들의 범위를 지정하고, 세 번째 인수에 지정된 위치로 복제한다. 처음 두 인수는 입력 반복자만 충분하므로 어떤 카테고리의 반복자라도 쓸 수 있다. 따라서 세 번째 반복자는 반드시 출력 반복자여야 한다. 예제로 보자.

std::vector<double> data {32.5, 30.1, 36.3, 40.0, 39.2};
std::cout << “값은 공백으로 구분해서 입력하고, 종료하려면 Ctrl+Z를 입력하세요:” << std::endl;
std::copy(std::istream_iterator<double>(std::cin), std::istream_iterator<double>(),
                                        std::back_inserter(data));
std::copy(std::begin(data), std::end(data), std::ostream_iterator<double>(std::cout, ” “));
 

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.