c++ - bits/STL_tree.h中_Rb_tree_increment的定义是什么?

标签 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 ();

但是我找不到这个函数的定义。谁能帮忙?

非常感谢。

最佳答案

正如@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));
  }

关于c++ - bits/STL_tree.h中_Rb_tree_increment的定义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17150544/

相关文章:

c++ - 将 MIDI 事件发送到独立采样器/合成器

algorithm - 如何计算 GPX 轨道中的 "corners"?

algorithm - 是否可以将任何碱基转换为任何碱基(范围 2 到 46)

c++ - struct 中的 std::string - 复制/分配问题?

c++ - 比较 C++ 中的两个 STL 列表

c++ - OpenCV 错误 : Image step is wrong (The matrix is not continuous)

c++ - 从其他类访问非类型模板参数的最佳方法是什么?

c++ - 为什么在C/C++中使用uint_8等?

javascript - 如何使用 JavaScript 排序对树 JSON 对象进行双重排序?

c++ - 在容器上的循环中同时访问更多元素的 STL 方法