(C++ STL : iterator-4) iterator 만들기 basic(membertype)

Posted by : at

Category : Cpp


// 우선 single linked list의 iterator를 보자.

template<typename T> class slist_iterator
{
    Node<T>* current = 0;
public:
    slist_iterator(Node<T>* p = 0) : current(p) {}

    slist_iterator& operator++()
    {
        current = current->next;
        return *this;
    }

    T& operator*() { return current->data; }

    bool operator== (const slist_iterator& it)
    {
        return current == it.current;
    }

    bool operator !=(const slist_iterator& it)
    {
        return current != it.current;
    }
};

자신의 테그를 넣어 줘야한다.

#include <iterator>

template<typename T> class slist_iterator
{
    Node<T>* current = 0;
public:
    slist_iterator(Node<T>* p = 0) : current(p) {}

    using iterator_category = forward_iterator_tag;

    // 아래도 추가적으로 넣어 줌.
    using value_type = T;
    using pointer = T*;
    using reference = T&;
    using difference_type = std::ptrdiff_t;

    // ...

그런데 iterator를 만들때마다 위 코드를 모두 넣어줘야하나?

// 아래의 iterator는 <iterator.h>에서 제공해준다.
template<typename Category, 
        typename T, 
        typename Distance = std::ptrdiff_t, 
        typename Pointer = T*, 
        typename Reference = T&>
struct iterator
{
    using iterator_category = forward_iterator_tag;
    using value_type = T;
    using pointer = Pointer;
    using reference = Reference;
    using difference_type = Distance;
};

template<typename T> class slist_iterator : 
    public iterator<forward_iterator_tag, T>
{
    Node<T>* current = 0;
public:
    // ...

About Taehyung Kim

안녕하세요? 8년차 현업 C++ 개발자 김태형이라고 합니다. 😁 C/C++을 사랑하며 다양한 사람과의 협업을 즐깁니다. ☕ 꾸준한 자기개발을 미덕이라 생각하며 노력중이며, 제가 얻은 지식을 홈페이지에 정리 중입니다. 좀 더 상세한 제 이력서 혹은 Private 프로젝트 접근 권한을 원하신다면 메일주세요. 😎

Star
Useful Links