C++ 通用链表和迭代器

标签 c++

我刚开始学习 C++,我需要编写一个通用的链表和迭代器。这是我写的代码(list.h),但我认为它不正确。它不起作用,我不确定它是否通用。

#include <iostream>        
#include <cassert>


using namespace std;        
using namespace ListExceptions;

class List;    
class Iterator;

template<class T>

class Node{    
private:    
   T data;    
   Node* previous;    
   Node* next;    
   friend class List;    
   friend class Iterator;    
public:    
   Node(T element){    
       data = element;    
       previous = NULL;    
       next = NULL;    
   }    
};    

class List{    
private:    
   Node* first;    
   Node* last;    
public:    
   List(){    
       first = NULL;    
       last = NULL;    
   }    
   void pushBack(T element);    
   void insert(Iterator iter, T element);    
   Iterator remove(Iterator i);    
   Iterator find(const Predicate& predicate);    
   void sort(const Compare& comparer);    
   int getSize() const;    
   Iterator begin();    
   Iterator end();    
};    

class Iterator{    
private:    
   Node* position;    
   Node* last;    
   friend class List;    
public:    
   Iterator();    
   void next();    
   T getElement()const;    
   bool equals(Iterator b) const;    
   bool notEquals(Iterator b) const;    
};    

如果有人可以帮助我?

最佳答案

首先是 ListIterator 是非模板类,您可能想创建给定类型的 List .您可能会考虑重构代码,使 NodeIterator 都是 List 类型的内部类(这会使事情变得更简单):

template <typename T>
class List {
public:
   typedef T value_type;

   class Iterator;
   struct Node {           // Internal to List<T>, so there will be different
                           // List<T>::Node for each instantiationg type T
                           // But you don't need the extra <T> parameter for List
                           // or Iterator
      value_type data;
      Node* next;
      Node* last;

      friend class List;       // Inside List<T>, List by itself refers to List<T>
      friend class Iterator;
   };
   //...
};

替代方案的代码稍微复杂一些:

template <typename T> class List;
template <typename T> class Iterator;
template <typename T> class Node {
   T data;
   Node * next;
   Node * last;
   friend class List<T>;
   friend class Iterator<T>;
};
template <typename T>
class List {
   Node<T>* first;              // note <T> required
//...
};

关于C++ 通用链表和迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6423604/

相关文章:

C++ 成员函数指针

c++ - 正确转换 fstream 读写成员函数

c++ - 在类名之后但在开括号之前的引号

c++ - 体系结构 x86_64 : 的 undefined symbol

c++ - 如何在 Linux 中从 Python 代码调用 C++ 函数?

c++ - QPropertyAnimation : Immedately jump to end of animation?

c++ - 使用 RegQueryValueEx 从注册表中获取机器名称

java - 将 int 写入二进制缓冲区(Android)并使用 C++ 读取

c++ - 创建继承对象的方法

c++ - 使用 Matlab Compiler 将 MATLAB .m 文件转换为 .mex 文件