2017-04-11 2 views
0

Ich habe ein Programm erstellt, das jede Instanz der eingegebenen Nummer aus der Warteschlange entfernt, aber nicht herausfinden kann, wie sie geändert wird, so dass nur die erste Instanz dieser Nummer entfernt wird .1. Instanz einer bestimmten Nummer aus einer Warteschlange entfernen

Hier ist mein Programm ab sofort:

#include <iostream> 
#include <list> 
#include <stack> 
#include <queue> 


using namespace std; 


int main(){ 
    queue<int> q; 

    int size; 
    cout << "Enter the size of the queue: "; 
    cin >> size; 
    int val; 

    for (int i = 0; i < size; i++){ 
     cout << "Enter a value to insert into the queue: "; 
     cin >> val; 
     q.push(val); 

    } 

    int value; 
    bool found = false; 
    queue<int> temp; 
    queue<int> printQueue; 
    cout << "Which value would you like to remove: "; 
    cin >> value; 

    while (!q.empty()){ 
     if (q.front() == value) 
      q.pop(); 
     else{ 
      temp.push(q.front()); 
      q.pop(); 
     } 
    } 
    q = temp; 
    printQueue = q; 

while (!printQueue.empty()){ 
     cout << printQueue.front() << " "; 
     printQueue.pop(); 
    } 

} 

Wie würde ich das ändern? Ich dachte darüber nach, einen bool-Wert in die while-Schleife zu setzen, der alles löscht, aber dann würde es herausstechen, sobald es einen gefunden hat, und den Kopiervorgang nicht über den Rest der Warteschlange auf den temporären beenden.

Jede Hilfe wäre großartig.

+1

Beenden Sie die 'while (! Q.empty())' -Schleife frühzeitig, wenn Sie ein Element entfernt haben. Fügen Sie dann eine weitere Schleife hinzu, um alle verbleibenden Elemente von 'q' nach' temp' zu übertragen. Sie sollten jedoch in Betracht ziehen, einen angemesseneren Container zu verwenden. –

+0

lernen für einen Test also müssen Sie dieses lernen! Aber danke, werde das versuchen –

Antwort

0

Wenn es die Anforderungen zulassen, können Sie eine doppelendige Warteschlange verwenden, die Iteration und Modifikation ermöglicht.

0

Ich denke, Sie sind sehr nah dran, Sie könnten einfach eine Bestätigung in Ihre While-Schleife hinzufügen, um Ihr Element nur einmal zu öffnen.

int main(){ 
queue<int> q; 

int size; 
cout << "Enter the size of the queue: "; 
cin >> size; 
int val; 

for (int i = 0; i < size; i++){ 
    cout << "Enter a value to insert into the queue: "; 
    cin >> val; 
    q.push(val); 

} 

int value; 
bool found = false; 
queue<int> temp; 
queue<int> printQueue; 
cout << "Which value would you like to remove: "; 
cin >> value; 

while (!q.empty()){ 
    if (q.front() == value && found == false) 
     q.pop(); 
     found = true; 
    else{ 
     temp.push(q.front()); 
     q.pop(); 
    } 
} 
q = temp; 
printQueue = q; 

while (!printQueue.empty()){ 
    cout << printQueue.front() << " "; 
    printQueue.pop(); 
    } 

} 
Verwandte Themen