RedBlackTree实现的自定义STL类迭代器

时间:2010-03-01 18:36:39

标签: c++ stl iterator

我需要一个类似STL的双向迭代器(运算符<,begin(),rbegin(),end(),rend())作为下面的内部类(我已经花了相当多的时间将自己放在一起来自对象技术J的C#文章中的一个工作树,并将其翻译成C ++):

template<typename K, typename V> class rbtree {  
public:  
  rbtree(){  
    root = NULL;  
    numberElements = 0;  
    insertedNode = NULL;  
    nodeBeingDeleted = NULL; // Set in DeleteNode  
    siblingToRight = false; // Sibling of curNode  
    parentToRight = false; // Of grand parent  
    nodeToDeleteRed = false; // Color of deleted node  
  }  
  //...  
private:  
  struct Node {  
    // Fields  
    K key; // Generic object held by each node  
    Node* left; Node* right; Node* parent; // Links to children and parent  
    bool red;// = true; // Color of node  
    // Constructor  
    Node(){  
      red = true;  
    }  
    Node(K key, Node* parent) {  
      this->key = key;  
      this->parent = parent;  
      left = NULL; right = NULL;  
      red = true;  
    }  
  };  
  // Fields  
  Node* root;  
  //...  
};

1 个答案:

答案 0 :(得分:2)

你会惊讶地知道std::set被实现为红黑树。你自己写一篇文章的原因是什么?

一个真正的答案:编写迭代器并非易事。您应该阅读迭代器要求之间的常见差异。 This Stackoverflow question 是您问题的一种副本,并提供有用的提示。