while循环不等于std :: queue size

时间:2015-02-23 19:39:46

标签: c++ while-loop queue

我有这段代码:

std::queue<unsigned int> offsets;
// (fill offsets here)

DEBUG(std::to_string(offsets.size())) // print offsets.size() to console
int iterations = 0;

while (!offsets.empty())
{
    iterations++;

    unsigned int currOffset = offsets.front();
    offsets.pop();

    if (currOffset == 0)
    {
        DEBUG("breaking from while loop")
        break;
    }

    // do something with currOffset
}

DEBUG(std::to_string(iterations))

出于某种原因,iterations永远不等于offsets.size()。我不确定为什么会这样。在我的测试应用中,offsets.size() == 28,但iterations == 11。我只是在这个应用程序中从while循环中断了一次。

知道为什么会这样吗?非常感谢帮助。

2 个答案:

答案 0 :(得分:3)

因为第11个偏移量为零,并且在循环到达数据结构末尾之前触发了条件中断?

或者// do something with currOffset涉及从队列中弹出更多东西。

答案 1 :(得分:1)

如果front()== 0,if会中断循环,不需要为空。

while (!offsets.empty())
{
    iterations++;

    unsigned int currOffset = offsets.front();
    offsets.pop();

    if (currOffset == 0) // *** Here is the problem ***
    {
        DEBUG("breaking from while loop")
        break;
    }

    // do something with currOffset
}