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.的评论是正确的。谢谢你们两个。也许可以问个问题?这是一个问答网站。