为泛型数据类型创建自己的迭代器

creating my own iterator for generic data type

本文关键字:自己的 迭代器 创建 数据类型 泛型      更新时间:2023-10-16

我不明白为什么我的代码不能编译。

template<class Priority,class T> class PriorityQueue {
public:
  class Iterator;
  //some methods
  Iterator begin() const;
  Iterator end() const;
};
然后在Iterator类中:
template<class Priority,class T>
class PriorityQueue<Priority,T>::Iterator {
   //implement ctor,operator++,==etc.

我得到的几乎所有84个错误都是关于这些函数的:

template<class Priority,class T>
Iterator<Priority,T> PriorityQueue<Priority,T>::begin() const{
    return Iterator<Priority,T>(firstNode);
}
template<class Priority,class T>
Iterator<Priority,T> PriorityQueue<Priority,T>::end() const{
    return Iterator<Priority,T>(nullptr);
}

错误是:错误2错误C4430:缺少类型说明符-假定为int。注意:c++不支持default-int。错误2:缺少类型说明符-假设为int。注意:c++不支持default-int和:Error 1 Error C2143:语法错误:在'<'之前缺少';'。所有关于方法begin()和end()(在它们的第一行Iterator PriorityQueue::begin())。编辑:我试过使用typename,但没有帮助。

你可以这样做:

template<class Priority, class T> class PriorityQueue {
  class Iterator {
    //implement ctor,operator++,==etc.
  };
public:
  typedef Iterator iterator;
  //some methods//implement ctor,operator++,==etc.
  Iterator begin() const;
  Iterator end() const;
};
template<class Priority,class T>
typename PriorityQueue<Priority, T>::iterator 
PriorityQueue<Priority,T>::begin() const    {
    return Iterator(); // return right staff
}
template<class Priority,class T>
typename PriorityQueue<Priority, T>::iterator
PriorityQueue<Priority,T>::end() const{
    return Iterator(); // return right staff
}
  • 我建议您声明/定义您的Iterator private,并通过typedef提供访问,就像STL所做的那样。
演示