【问题标题】:How do i print a queue?如何打印队列?
【发布时间】:2014-04-12 09:13:50
【问题描述】:

我正在尝试在下面打印一个队列。我已经尝试过创建一个临时队列并将其写入然后将其写回的想法。

但它不起作用。

或者我在这里错过了什么?

for(int i = 1; i<myQueue.size(); i++)
{
     queue<int> tempQueue;

cout << myQueue.front() << endl;
MytempQueue.push(myQueue.front());
myQueue.pop();

myQueue.push(myTempQueue.back());

}

我的队列是queue<int> myQueue;

基本上我想打印这个队列而不清空它......但我被困在这里。

【问题讨论】:

  • 只是一个提示:如果打印是您代码中频繁且重要的操作,那么队列可能只是数据类型的错误选择,您最好使用不同类型的容器完全。
  • @ChristianHackl 那个容器是什么?

标签: c++ stl queue


【解决方案1】:

没有有效的方法来做到这一点*。但您可以执行以下操作:

  1. 复制队列。
  2. 遍历副本,打印正面,然后弹出它。

例如:

#include <queue>
#include <iostream>
    
void print_queue(std::queue<int> q)
{
  while (!q.empty())
  {
    std::cout << q.front() << " ";
    q.pop();
  }
  std::cout << std::endl;
}

int main()
{
  std::queue<int> q;
  for (auto i : {1,2,3,7,4,9,7,2,4}) q.push(i);
  print_queue(q);
}

* 有一个使用继承的技巧。 std::queue 有一个受保护的成员 C,它是保存数据的底层容器。您可以从std::queue 继承并添加使用C 进行打印的方法。但是您必须充分意识到从不一定为此设计的类型继承的含义。

【讨论】:

  • 如何复制队列?这就是我想要做的。伪代码帮助会很棒!
  • queue&lt;int&gt; copy = myQueue;
  • @user3398034 std::queue 同时拥有 copy constructorcopy assignment operator
  • @user3398034 我加了一个例子
  • 如果你有像 queue 这样的自定义类类型,那么我们可以使用 q.front().yourMethod() 来获取或设置值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多