반복자를 위한 템플릿 정의는 다음과 같다.
// 반복자 클래스 템플릿 - 순방향 반복자 template<typename T> class Numeric_Iterator : public std::iterator <std::forward_iterator_tag, T> { friend class Numeric_Range <T>; private: Numeric_Range<T>& range; // 이 반복자 범위에 대한 참조 T value; // 참조가 가리키는 값 public: explicit Numeric_Iterator(Numeric_Range<T>& a_range) : range {a_range}, value {a_range.start} {}; // 할당 연산자 Numeric_Iterator& operator=(const Numeric_Iterator& src) { range = src.range; value = src.value; } // 반복자를 역참조한다 T& operator*() { // 값이 마지막에서 하나 더 뒤라면 이 값은 끝 반복자다 if (value == static_cast<T>(range.start + range.count*range.step)) { throw std::logic_error(“Cannot dereference an end iterator.”); } return value; } // 전치 증가 연산자 Numeric_Iterator& operator++() { // 값이 마지막에서 하나 더 뒤라면 이 값은 끝 반복자다 if (value == static_cast<T>(range.start + range.count*range.step)) { throw std::logic_error(“Cannot increment an end iterator.”); } value += range.step; // 범위 스텝만큼 값을 증가 return *this; } // 후치 증가 연산자 Numeric_Iterator operator++(int) { // 값이 마지막에서 하나 더 뒤라면 이 값은 끝 반복자다 if (value == static_cast<T>(range.start + range.count*range.step)) { throw std::logic_error(“Cannot increment an end iterator.”); } auto temp = *this; value += range.step; // 범위 스텝만큼 값을 증가 return temp; // 증가되기 전의 반복자 } // 비교 bool operator<(const Numeric_Iterator& iter) const { return value < iter.value; } bool operator==(const Numeric_Iterator& iter) const { return value == iter.value; } bool operator!=(const Numeric_Iterator& iter) const { return value != iter.value; } bool operator>(const Numeric_Iterator& iter) const { return value > iter.value; } bool operator<=(const Numeric_Iterator& iter) const { *this < iter || *this == iter;} bool operator>=(const Numeric_Iterator& iter) const { *this > iter || *this == iter;} };