C++ Tree类insert方法中Node指针数组赋值语句作用问询
问题解答
1. new创建的指针数组成员默认值
你代码中ptr = new Node *[MAX + 1];申请的是指针类型动态数组,C++中对内置类型(指针属于内置类型)的动态数组做默认初始化时,不会对元素进行清零操作,所有数组成员都是野指针,指向的内存地址是不确定的随机值,本身没有合法语义,直接读取这类值属于未定义行为。
因此cursor->size自增后对应的下标位置,在赋值前本身就是无意义的野值,直接覆盖不会产生任何问题。
2. 目标代码行的作用
这段代码是典型的多叉树(常见为B树/B+树)的节点插入逻辑,这行属于「为新插入元素腾挪数组空间」操作的一部分:
- 执行
cursor->size++前,size表示当前节点已使用的指针槽位数量,ptr[0]到ptr[size]都是已赋值的有效子节点指针 - 执行
cursor->size++后,节点可用槽位总数加1,新增的槽位就是ptr[自增后的size] - 这行赋值是把原本排在最后一位的有效指针
ptr[size-1]拷贝到新的最后一个槽位,完整代码中这通常是循环操作的第一步:如果需要在更靠前的位置插入新指针,会继续向前遍历执行类似的赋值操作,直到目标插入位置被腾空,之后就可以把新的子节点指针写入空出的槽位。
内容的提问来源于stack exchange,提问作者Fandom of the Opera
相关产品推荐
相关产品推荐

