더북(TheBook)

간단하게 정의한 반복자 타입을 동작하는 예제로 살펴보자. 숫자 타입 값의 범위를 표현할 수 있는 클래스 템플릿과 범위를 지정하는 시작 반복자와 끝 반복자를 생성할 수 있는 클래스 템플릿을 정의할 것이다. 반복자 클래스도 템플릿 타입이므로 두 템플릿은 같은 헤더 파일 Numeric_Range.h에 정의했다. Numeric_Range<T> 템플릿의 정의는 다음과 같다.

template <typename T> class Numeric_Iterator; // 템플릿 타입 정의
// 숫자 범위를 정의
 
template<typename T>
class Numeric_Range
{
  static_assert(std::is_integral<T>::value || std::is_floating_point<T>::value,
                                “Numeric_Range type argument must be numeric.”);
 
  friend class Numeric_Iterator <T>;
 
private:
  T start;                                    // 범위에서 첫 번째 값
  T step;                                     // 연속값의 증가값
  size_t count;                               // 범위에 있는 값의 개수
 
public:
  explicit Numeric_Range(T first=0, T incr=1, size_t n=2) : start {first}, step {incr}, count {n}{}
 
  // 범위에 대한 시작 반복자를 반환
  Numeric_Iterator<T> begin(){ return Numeric_Iterator<T>(*this); }
 
  // 범위에 대한 끝 반복자를 반환
  Numeric_Iterator<T> end()
  {
    Numeric_Iterator<T> end_iter(*this);
    end_iter.value = start + count*step;     // 끝 반복자 값은 마지막에서 하나 더 지나간 값
    return end_iter;
  }
};
 

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