Пользовательский STL-подобный итератор для реализации RedBlackTree - PullRequest
0 голосов
/ 01 марта 2010

Мне нужен STL-подобный двунаправленный итератор (operator <, begin (), rbegin (), end (), rend ()) в качестве внутреннего класса для следующего (я уже потратил много времени сам на сборку рабочее дерево из статьи C # в J Object Tech и переведенной на C ++): </p>

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 Ответ

2 голосов
/ 01 марта 2010

Вы будете удивлены, узнав, что std::set реализован как красно-черное дерево. Каковы ваши причины, чтобы написать один самостоятельно?

Для реального ответа: написание итераторов не тривиально. Вы должны прочитать об общих различиях между требованиями итераторов. Этот вопрос Stackoverflow является своего рода дубликатом вашего вопроса и дает полезные советы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...