您好我有以下函数打印队列的元素
template<typename T>
void queue<T>::print()
{
T x;
while(!empty())
{
pop(x);
cout<<x<<" ";
}
} 我已经建立了这样的队列队列
queue< queue<int> > my_queue_of_queues =queue< queue<int>>();
但是如何打印&#34; my_queue_of_queues&#34;的排队的所有元素?
答案 0 :(得分:2)
但是如何打印“my_queue_of_queues”队列的所有元素?
选项1 使用operator<<
代替print
。
template<typename T>
std::ostream& operator<<(std::ostream& out, queue<T> const& q)
{
// Don't modify the input.
// Create a copy and modify the copy.
queue<T> copy(q);
while(!copy.empty())
{
T x;
copy.pop(x);
out << x << " ";
}
return out;
}
选项2 更新print
并调用operator<<
函数重定向实施。
template<typename T>
void queue<T>::print()
{
cout << *this;
}
选项3 更新print
并致电operator<<
函数重定向实施,但将std::ostream
传递给print
。不要在cout
中假设print
。
template<typename T>
void queue<T>::print(std::ostream& out)
{
out << *this;
}
答案 1 :(得分:1)
如果您不想更改print()
实施,只需定义一个operator<<(std::ostream&, const queue<T>&)
重载,它就会正常工作:
template <typename T>
auto& operator<<(std::ostream& os, const queue<T>& x)
{
x.print();
return os;
}