2010-10-07 2 views

ответ

7
while (!q.empty()) 
{ 
    std::string str = q.front(); 

    // TODO: do something with str. 

    q.pop(); 
} 
0

Его лучше использовать время цикл как:

while (!q.empty()) { 
// do operations. 
} 

Но если вы сделаете это сразу после объявления очереди, вы не получите в цикле, поскольку очередь будет пустой при создании. В этом случае вы можете использовать цикл Do-While как:

queue<string> q; 
do { 
// enqueue and dequeue here. 
}while (!q.empty()); 
0

Да его возможно.

int size=q.size(); 
for(int i=0;i<size;i++){ 
    std::cout<<"\nCell - "<< q.front(); 
    q.pop(); 
} 

Но люди в основном не использовать для цикла, потому что каждый размер время очереди будет проверяться на счетчик цикла, где в середине п/2 elemets выскочит итерация будет в конечном итоге ubruptly, как размер будет п/2 и i также n/2. Пример, упомянутый ниже.

for(int i=0;i<q.size();i++){ 
    std::cout<<"\nCell - "<< q.front(); 
    std::cout<<"\tSize: - "<< q.size()<<" I value:"<<i; 
    q.pop(); 
} 
2

Это тот же код, что и лучший ответ, но с использованием for петли. Для меня это выглядит чище.

for (; !q.empty(); q.pop()) 
{ 
    auto& str = q.front(); 

    // TODO: do something with str. 
} 
+6

Пожалуйста, добавьте объяснения в свой ответ. –

+1

для цикла не требуется экземпляр/инициировать переменную, поэтому мы просто используем ';' чтобы он ничего не делал, условие «до» до тех пор, пока очередь не будет пустой, в конце цикла; вытащите элемент из очереди – Sherlock