Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 关于rbtree的SGI stl中stl_tree.h中的_M_减量函数的实现_C++_Stl_Tree - Fatal编程技术网

C++ 关于rbtree的SGI stl中stl_tree.h中的_M_减量函数的实现

C++ 关于rbtree的SGI stl中stl_tree.h中的_M_减量函数的实现,c++,stl,tree,C++,Stl,Tree,在增量函数的末尾 if (_M_node->_M_right != __y) _M_node = __y; 处理前一个节点是最大值的情况,并将头节点(_y)分配给_M_节点 void _M_increment() { if (_M_node->_M_right != 0) { _M_node = _M_node->_M_right; while (_M_node->_M_left != 0) _M_node = _M_no

在增量函数的末尾

if (_M_node->_M_right != __y)
      _M_node = __y;
处理前一个节点是最大值的情况,并将头节点(_y)分配给_M_节点

void _M_increment()
{
  if (_M_node->_M_right != 0)
  {
    _M_node = _M_node->_M_right;
    while (_M_node->_M_left != 0)
      _M_node = _M_node->_M_left;
  }
  else
  {
    _Base_ptr __y = _M_node->_M_parent;
    while (_M_node == __y->_M_right)
    {
      _M_node = __y;
      __y = __y->_M_parent;
    }
    if (_M_node->_M_right != __y)
      _M_node = __y;
  }
}
但是在_M_减量函数中,没有类似的代码来处理前一个值最小的类似情况

void _M_decrement()
{
  if (_M_node->_M_color == _S_rb_tree_red &&
    _M_node->_M_parent->_M_parent == _M_node)
  _M_node = _M_node->_M_right;
  else if (_M_node->_M_left != 0)
  {
    _Base_ptr __y = _M_node->_M_left;
    while (__y->_M_right != 0)
      __y = __y->_M_right;
    _M_node = __y;
  }
  else {
    _Base_ptr __y = _M_node->_M_parent;
    while (_M_node == __y->_M_left)
    {
      _M_node = __y;
      __y = __y->_M_parent;
    }
    _M_node = __y;
  }
}
减量函数没有类似的代码来判断边界条件是否合法?
非常感谢您的建议。

您有什么问题?不允许减少
begin()
。允许在
end()
@T.C.之前增加迭代器。你说得对。@JohnZwinck我不明白减量没有类似代码的原因。T.C.的评论是正确的。谢谢你们两个。也许可以问个问题?这是一个问答网站。