2017-04-11 52 views
0

我創建了一個程序,它將從隊列中刪除輸入號碼的每個實例,但無法弄清楚如何修改它,以便它只會刪除所述號碼的第一個實例。從隊列中刪除特定號碼的第一個實例

這是我的計劃,截至目前:

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

} 

我將如何修改呢?我正在考慮在while循環中放置一個bool值來刪除所有內容,但是一旦它找到一個而不是完成將其他隊列複製到臨時目錄的時候它就會被踢出去。

任何幫助將是偉大的。

+1

每當你刪​​除一個元素時,儘早退出'while(!q.empty())'循環。然後添加另一個循環來將剩餘的元素從'q'傳遞給'temp'。你應該考慮使用更合適的容器。 –

+0

爲了一個測試學習,所以要學習這一個!但是,謝謝,會嘗試 –

回答

0

如果需求允許,可以使用雙端隊列,它允許迭代和修改。

#include <algorithm> 
#include <queue> 

int value; 

std::deque<int> q; 

//insert numbers 
//define value 

//find first instance of value 
auto iter = std::find(std::begin(q), std::end(q), value); 

//if found, erase it 
if (iter != std::end(q)) { 
    q.erase(iter); 
} 
0

我覺得你非常接近,你可以在你的while循環中添加一個驗證來只彈出一次你的元素。

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

} 
相關問題