【问题标题】:Custom STL-like iterator for RedBlackTree implementation用于 RedBlackTree 实现的自定义类 STL 迭代器
【发布时间】:2011-01-22 10:06:34
【问题描述】:

我需要一个类似 STL 的双向迭代器(operator

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;  
  //...  
};

【问题讨论】:

  • 将所有代码行缩进四个(或更多)空格,以便缩进、语法高亮和自动转义。
  • 选择您的代码并按“101010”按钮
  • 这读起来像是合约编程的规范,而不是问题......
  • 确实,问题在哪里?
  • 希望你在C#翻译后不要忘记添加析构函数

标签: c++ stl iterator


【解决方案1】:

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

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

【讨论】:

  • 重新发明的原因?学习。 (见上面的评论)不需要问,如果它真的微不足道。谢谢
  • @gue22:如果你正在学习,那么去寻求答案并不能完全教会你很多东西。打开std::set&lt;T&gt; 的源代码,你可以整天看到一个有效的实现。
  • 谢谢,比利,这就是我接下来要尝试的。我只是希望在这里得到一个快速的答案,因为我明天要考试,周五截止。
猜你喜欢
  • 2014-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-10
  • 2016-11-04
  • 2018-08-25
  • 2015-05-26
相关资源
最近更新 更多