首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用boost正确实现自定义类的迭代器

不使用boost正确实现自定义类的迭代器
EN

Stack Overflow用户
提问于 2014-12-23 08:42:56
回答 1查看 147关注 0票数 1

我上了LinkedList的课。这是一个singly-linked-list,我想为这个类创建一个forward_iterator,我已经编写了代码,我想知道我是否正确地实现了它。,我所提到的编写这段代码的来源是这里

代码语言:javascript
复制
template <class T>
struct node
{
    T data;
    node *next;
};

template <class T>
class LinkedList
{
    private :
    node<T> *start;
    unsigned int numElements;
    // Assume all functions are implemented
};

Iterator代码:

代码语言:javascript
复制
class iterator : public std::iterator<std::forward_iterator_tag,node<T>*>
{
    node<T>* itr;

    public :

    iterator (node<T>* temp) : itr(temp) {}
    iterator (const iterator& myitr) : itr(myitr.itr) {}
    iterator& operator++ ()
    {
        itr = itr->next;
        return *this;

    }
    bool operator== (const iterator& rhs) 
    {
        return itr == rhs.itr;

    }
    bool operator!= (const iterator& rhs) 
    {
        return itr != rhs.itr;

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

};

上述实施是否正确?

如果没有,我应该做什么改变?还有什么其他的东西需要实现吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-23 08:51:46

我假设在

代码语言:javascript
复制
iterator& operator++ 

是一个错误(尽管如此,编译器需要它们)。那么你只缺了两件事:

  • 后缀++算子
  • ->算子

所以:

代码语言:javascript
复制
iterator operator++(int) {
  iterator result(*this);
  ++*this;
  return result;
}

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

然后,...and满足了ForwardIterator概念的所有需求。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27616820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档