2017-02-16 86 views
0

你好,我有以下功能,打印队列打印队列

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>>(); 

,但我怎么能打印“my_queue_of_queues”队列的所有元素?

回答

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::ostreamprint。不要假设coutprint

template<typename T> 
void queue<T>::print(std::ostream& out) 
{ 
    out << *this; 
} 
1

如果你不想改变你的print()实现,简单地定义一个operator<<(std::ostream&, const queue<T>&)过载,它会只是工作

template <typename T> 
auto& operator<<(std::ostream& os, const queue<T>& x) 
{ 
    x.print(); 
    return os; 
}