如何在C++中迭代STL队列
队列是一种遵循特定顺序执行操作的线性结构。该顺序是先进先出(FIFO)。
语法:
数据类型: 队列可以根据值接受任何数据类型,例如int、char、float等。
std: :queue 容器没有提供从中我们可以使用迭代器在队列上迭代的 std: :begin 函数和 std: :end 函数。简单地说,不能迭代 std: :queue 。
有3种方法可以迭代队列,即:
- 使用标准 std: :front 和 std: :pop 方法
- 创建给定std: :queue的副本
- 使用std: :deque
1. 使用标准 std : : front 和 std : : pop 方法
我们可以使用 std: :front 进行队列迭代,它将返回队列的前一个元素,而 std: :pop 将删除队列的前一个元素。但是,使用此方法迭代队列后,队列将消失,因为我们在迭代过程中删除队列元素。
例如:
输出
2. 创建给定std : : queue的副本
如果我们想在 std: :queue 上进行迭代,那么可以创建一个临时副本队列,并将队列的所有元素复制到副本队列中,然后可以轻松遍历复制队列并使用 std: :front() 函数查找队列的元素并使用 std: :pop 函数从队列中删除元素。
例如:
输出
3. 使用std : : deque
在上述方法中,需要额外的复制队列以先复制队列的所有元素,这种方法不是空间高效的方法。使用std:::dequeue,我们可以使用高效的空间迭代,这提供了所有的标准操作,其中包括 std: :queue 。我们可以使用for循环遍历dequeue。
我们可以使用 dequeue: :cbegin() 和 dequeue: :cend() 按正向顺序打印dequeue, dequeue: :crbegin() 和 dequeue: :crend() 按反向顺序打印dequeue。
示例:
输出结果
时间复杂度: O(n) // n为队列的大小。
辅助空间: O(n)。