Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C++中使用“DeQue'”的无限循环_C++_Loops_For Loop_Infinite Loop_Deque - Fatal编程技术网

在C++中使用“DeQue'”的无限循环

在C++中使用“DeQue'”的无限循环,c++,loops,for-loop,infinite-loop,deque,C++,Loops,For Loop,Infinite Loop,Deque,我对以下代码有问题: 包括 包括 使用名称空间std; int main{ 德克q={1}; 对于int val=q.front;!q.empty;q.pop\u front{ cout您从不更新整数val。它只在for循环的第一部分初始化,当您将容器的第一个值复制到其中时,这个值会一直被打印出来 你可以通过以下方式解决这个问题 for (int val = q.front(); !q.empty(); q.pop_front(), val = q.front()) { // as bef

我对以下代码有问题:

包括 包括 使用名称空间std; int main{ 德克q={1}; 对于int val=q.front;!q.empty;q.pop\u front{
cout您从不更新整数val。它只在for循环的第一部分初始化,当您将容器的第一个值复制到其中时,这个值会一直被打印出来

你可以通过以下方式解决这个问题

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

这是因为您从未修改val的值。您将其初始化为int val=q.front,这是它最后一次被更改


要么修改val,例如q.push_back++val;要么打印deque q的内容。

循环有两个问题

第一个是变量val在循环中没有改变,并且总是输出在循环的init部分设置的初始值

for (int val = q.front(); !q.empty(); q.pop_front()) {
     ^^^^^^^^^^^^^^^^^^^   
    cout << val << endl;
    q.push_back(val + 1);
    q.push_back(val + 2);
}
从队列中仅弹出一个值

循环可以按以下方式进行

#include <iostream>
#include <deque>

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

    for ( ; !q.empty(); q.pop_front() ) 
    {
        auto val = q.front();
        std::cout << val << '\n';
        q.push_back( ++val );
    }
}
在for循环的第一次迭代之前,val在其初始分配之后更新到哪里?
#include <iostream>
#include <deque>

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

    for ( ; !q.empty(); q.pop_front() ) 
    {
        auto val = q.front();
        std::cout << val << '\n';
        q.push_back( ++val );
    }
}
for ( ; !q.empty(); q.pop_front() ) 
{
    std::cout << q.front() << '\n';
    q.push_back( q.front() + 1 );
}