Как выполнить цикл for, пока очередь не пуста в C ++ - PullRequest
6 голосов
/ 07 октября 2010

мне нужно выполнить цикл for, пока очередь не опустеет мой код

queue<string> q;
for(int i=0;i<q.size(),i++)
{
     // some operation goes here
     // some datas are added to queue
}

Ответы [ 5 ]

8 голосов
/ 07 октября 2010
while (!q.empty())
{
    std::string str = q.front();

    // TODO: do something with str.

    q.pop();
}
3 голосов
/ 12 июля 2017

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

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

    // TODO: do something with str.
}
0 голосов
/ 01 апреля 2016

Да, это возможно.

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

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

for(int i=0;i<q.size();i++){
    std::cout<<"\nCell - "<< q.front();
    std::cout<<"\tSize: - "<< q.size()<<" I value:"<<i;
    q.pop();
}
0 голосов
/ 07 октября 2010
while ( ! q.empty() )
{
}
0 голосов
/ 07 октября 2010

Лучше использовать цикл while как:

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

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

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