我需要一个类似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;
//...
};
答案 0 :(得分:2)
你会惊讶地知道std::set
被实现为红黑树。你自己写一篇文章的原因是什么?
一个真正的答案:编写迭代器并非易事。您应该阅读迭代器要求之间的常见差异。 This Stackoverflow question 是您问题的一种副本,并提供有用的提示。