2017-02-16 109 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; 
}