2017-02-16 5 views
0

Hallo Ich habe die folgende Funktion, die die Elemente einer Warteschlange drucktDruckwarteschlange von Warteschlangen Elemente

template<typename T> 
void queue<T>::print() 
{ 
T x; 
while(!empty()) 
{ 
    pop(x); 
    cout<<x<<" "; 
} 

} ich eine Warteschlange von Warteschlangen wie diese

queue< queue<int> > my_queue_of_queues =queue< queue<int>>(); 

gemacht haben, aber wie kann ich Drucken Sie alle Elemente der Warteschlangen von "my_queue_of_queues"?

Antwort

2

aber wie kann ich alle Elemente der Warteschlangen von drucken "my_queue_of_queues"?

Option 1 Verwenden operator<< statt 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; 
} 

Option 2 aktualisieren print und rufen Sie die Funktion operator<< die Umsetzung erneut direkt.

template<typename T> 
void queue<T>::print() 
{ 
    cout << *this; 
} 

Option 3 aktualisieren print und rufen Sie die Funktion operator<< die Umsetzung erneut zu direkt, aber eine std::ostream-print passieren. Nehmen Sie nicht cout in print.

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

Wenn Sie Ihre print() Implementierung nicht ändern möchten, einfach eine operator<<(std::ostream&, const queue<T>&) Überlastung definieren und es wird gerade arbeiten:

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