c++ - 在 C++ 中使用 'deque' 的无限循环

标签 c++ loops for-loop infinite-loop deque

我对以下代码有疑问:

#include <iostream>
#include <deque>

using namespace std;

int main() {
    deque<int> q = {1};

    for (int val = q.front(); !q.empty(); q.pop_front()) {
        cout << val << endl;
        q.push_back(val + 1);
        q.push_back(val + 2);
    }

}

它产生了一个无限循环(这是正确的),但不是打印 1 2 3 4 ...,而是打印 1 1 1 1 1...。为什么会这样?

最佳答案

您永远不会更新整数 val。它仅在 for 循环的第一部分初始化,当您将容器的第一个值复制到其中时,这个值会一直打印。

你可以解决这个问题,例如通过

for (int val = q.front(); !q.empty(); q.pop_front(), val = q.front())
{
   // as before...
}

关于c++ - 在 C++ 中使用 'deque' 的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57871155/

相关文章:

c++ - 获取 C 样式数组长度的更好方法是什么?

c++ - 将折叠表达式传递给可变参数模板

Java最大函数递归

r - 在 R 中创建循环以将相同的函数应用于许多类似命名的变量

javascript - 语句仅在 for 循环中发生一次 - JavaScript

python - 在 for 循环中返回所有值

c++ - 链接器声称该对象已定义

c++ - 到 std::function<R(ARGS...)> 的可变参数模板转换适用于 GCC 而不是 MSVC2013,为什么?

java - 在 ArrayList 中查找项目并输出

c - 当没有为名字输入值时如何使 for 循环中断