为什么先查看然后删除而不是轮询
Why first peek and then remove instead of poll
在多个实例中,我遇到了先查看然后删除第一个队列头的算法。我想知道是否有任何特殊原因不使用 poll 代替。例如下面的二叉树层序遍历算法HERE
- 将根节点添加到队列中。
- 将队列大小分配给一个变量,比如计数。重复步骤 3 到 7 count 次,其中 N 是队列的大小。
- 如果队列不为空,打印队列。
- 查看头节点
- 如果头部已经离开child,将其加入队列
- 如果头部有权利child,将其加入队列
- 从队列中移除头部。
- 如果队列不为空,返回步骤2。
您可以查看一个元素,测试它并可能决定不删除它
Peek 检索队列后面的元素(最后一个元素)而不删除它,因此 PEEKing 是查看该元素以确认它是否是您要修改的元素的好方法。
您已经知道 pop 会在不提供元素引用的情况下删除元素以对其进行检查。所以这实际上取决于你真正想做什么。
一些容器只提供 peek 和 remove,因为如果有一个函数同时执行这两个功能,则很难或不可能提供强异常保证:http://en.wikipedia.org/wiki/Exception_safety
peek :检索但不删除此队列的头部,如果此队列为空,则 returns 为 null。
poll : 检索并移除此队列的头部,或者 returns null 如果此队列为空。
删除:
检索并删除此队列的头部。
在多个实例中,我遇到了先查看然后删除第一个队列头的算法。我想知道是否有任何特殊原因不使用 poll 代替。例如下面的二叉树层序遍历算法HERE
- 将根节点添加到队列中。
- 将队列大小分配给一个变量,比如计数。重复步骤 3 到 7 count 次,其中 N 是队列的大小。
- 如果队列不为空,打印队列。
- 查看头节点
- 如果头部已经离开child,将其加入队列
- 如果头部有权利child,将其加入队列
- 从队列中移除头部。
- 如果队列不为空,返回步骤2。
您可以查看一个元素,测试它并可能决定不删除它
Peek 检索队列后面的元素(最后一个元素)而不删除它,因此 PEEKing 是查看该元素以确认它是否是您要修改的元素的好方法。 您已经知道 pop 会在不提供元素引用的情况下删除元素以对其进行检查。所以这实际上取决于你真正想做什么。
一些容器只提供 peek 和 remove,因为如果有一个函数同时执行这两个功能,则很难或不可能提供强异常保证:http://en.wikipedia.org/wiki/Exception_safety
peek :检索但不删除此队列的头部,如果此队列为空,则 returns 为 null。
poll : 检索并移除此队列的头部,或者 returns null 如果此队列为空。
删除: 检索并删除此队列的头部。