在bits / stl_tree.h中_Rb_tree_increment的定义是什么?

时间:2013-06-17 14:53:21

标签: c++ algorithm stl

我想学习stl中红黑树的代码。我在文件bits / stl_tree.h中找到了一个名为_Rb_tree_increment的函数

它写道:

 143   _GLIBCXX_PURE _Rb_tree_node_base*
 144   _Rb_tree_increment(_Rb_tree_node_base* __x) throw ();

但是我找不到这个函数的定义。有人可以帮忙吗?

非常感谢。

3 个答案:

答案 0 :(得分:9)

就像@Mike Seymour所说,我在库的源路径上找到了定义,更准确地说是在gcc-4.8.1/libstdc++-v3/src/c++98/tree.cc内:

  static _Rb_tree_node_base*
  local_Rb_tree_increment(_Rb_tree_node_base* __x) throw ()
  {
    if (__x->_M_right != 0) 
      {
        __x = __x->_M_right;
        while (__x->_M_left != 0)
          __x = __x->_M_left;
      }
    else 
      {
        _Rb_tree_node_base* __y = __x->_M_parent;
        while (__x == __y->_M_right) 
          {
            __x = __y;
            __y = __y->_M_parent;
          }
        if (__x->_M_right != __y)
          __x = __y;
      }
    return __x;
  }

  _Rb_tree_node_base*
  _Rb_tree_increment(_Rb_tree_node_base* __x) throw ()
  {
    return local_Rb_tree_increment(__x);
  }

  const _Rb_tree_node_base*
  _Rb_tree_increment(const _Rb_tree_node_base* __x) throw ()
  {
    return local_Rb_tree_increment(const_cast<_Rb_tree_node_base*>(__x));
  }

答案 1 :(得分:3)

该定义取决于您拥有的标准库。 Differenc编译器供应商使用其编译器提供标准库的不同实现。看来你已经找到了一个非模板函数。这应该在一些cpp中定义,并且它将随lib文件中的编译器一起提供,因此您无法直接访问代码,因为它不会随编译器一起提供 - 它根本就没有必要。

如果您的编译器是专有编译器,例如来自微软或Borland,这就是你所能得到的。如果你有一个gcc,那么你很幸运:gcc是开源的,你可以在线找到标准库的gcc实现的源代码。

答案 2 :(得分:2)

它将在库的源代码中,您可能没有。

看起来你正在查看GNU库的标题,所以here将是一个开始寻找源代码的好地方。