在C++中使用“DeQue'”的无限循环
我对以下代码有问题: 包括 包括 使用名称空间std; int main{ 德克q={1}; 对于int val=q.front;!q.empty;q.pop\u front{在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
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 );
}