[C++] Iterator

JAsmine_log·2024년 9월 5일
0

C++

Iterator

Iterator는 기본 클래스 템블릿이다. 이것은 반복자 클래스를 파생하는 데 사용할 수 있는 기본 클래스 템플릿입니다. 반복자 클래스가 아니며 반복자가 가져야 하는 기능을 제공하지 않는다(?).

이 기본 클래스는 일부 멤버 유형만 제공하며, 실제로는 모든 반복자 유형에 존재할 필요가 없다(반복자 유형에는 특정 멤버 요구 사항이 없음). 그러나, 기본 iterator_traits 클래스 템플릿이 적절한 인스턴스를 자동으로 생성하는 데 필요한 멤버를 정의하기 때문에 유용하다(인스턴스화는 모든 반복자 유형에 유효해야 함).

template <class Category, class T, class Distance = ptrdiff_t,
          class Pointer = T*, class Reference = T&>
  struct iterator {
    typedef T         value_type;
    typedef Distance  difference_type;
    typedef Pointer   pointer;
    typedef Reference reference;
    typedef Category  iterator_category;
  };

Sample

// std::iterator example
#include <iostream>     // std::cout
#include <iterator>     // std::iterator, std::input_iterator_tag

class MyIterator : public std::iterator<std::input_iterator_tag, int>
{
  int* p;
public:
  MyIterator(int* x) :p(x) {}
  MyIterator(const MyIterator& mit) : p(mit.p) {}
  MyIterator& operator++() {++p;return *this;}
  MyIterator operator++(int) {MyIterator tmp(*this); operator++(); return tmp;}
  bool operator==(const MyIterator& rhs) const {return p==rhs.p;}
  bool operator!=(const MyIterator& rhs) const {return p!=rhs.p;}
  int& operator*() {return *p;}
};

int main () {
  int numbers[]={10,20,30,40,50};
  MyIterator from(numbers);
  MyIterator until(numbers+5);
  for (MyIterator it=from; it!=until; it++)
    std::cout << *it << ' ';
  std::cout << '\n';

  return 0;
}

Reference
[1] https://cplusplus.com/reference/iterator/iterator/?kw=iterator

profile
Everyday Research & Development

0개의 댓글