我使用deque来存储1到10的整数并输出到控制台1到10但是由于某些未知的原因,它为每个循环输出11。我无法弄清楚我做错了什么。
#include <iostream>
#include <cstring>
#include <deque>
using namespace std;
int main()
{
deque <int> deq;
int i;
for ( i= 1 ;i <=10 ;i++)
{
deq.push_front(i);
}
deque <int>::iterator d2;
d2 = deq.begin();
while (d2 != deq.end() )
{
cout<<i
<<endl;
d2++;
}
}
感谢您的帮助,我已经理解了问题
答案 0 :(得分:2)
您需要打印出迭代器包含的值,而不是i
:
while (d2 != deq.end() )
{
// wrong!
//cout<<i
// <<endl;
cout << *d2 << endl;
d2++;
}
作为旁注,这说明了为什么您应该始终将变量的范围限制在尽可能小的范围内。如果您的原始循环声明为:
for(int i = 1; i <= 10; ++i)
然后尝试打印i
(错误地)以后将是编译时错误。
答案 1 :(得分:1)
您正在打印i
,该i=11
已在for
循环中分配到{{1}}。
答案 2 :(得分:1)
你应该替换这个
cout << i << endl;
实际上从出队中移除了一些东西:
cout << deq.pop_front() << endl;
为了避免将来出现这样的简单错误,请通过在循环头中声明它们来限制循环索引变量的范围:
for (int i= 1 ;i <=10 ;i++)
{
deq.push_front(i);
}
这样你就会在循环外引用i
时遇到编译错误。
答案 3 :(得分:1)
int main()
{
deque <int> deq;
int i;
for ( i= 1 ;i <=10 ;i++)
{
deq.push_front(i);
}
===&GT;这里i
为11 (i <= 10)
在11
deque <int>::iterator d2;
d2 = deq.begin();
===&GT;在这里你真的想使用d2
while (d2 != deq.end() )
{
cout<<i
===&GT;在这里打印i
而不是d2
<<endl;
d2++;
}
}
答案 4 :(得分:0)
如果你在while循环中打印i,它会产生11,因为在你的代码之上。你已经在for循环中使用了int i,最后一个值为10.再次使用ddebugging工具在你的编辑器中调试代码,你就会知道你做错了什么。
while (d2 != deq.end() )
{
cout<<i<<endl;
d2++;
}
以上同时每次迭代总是产生11次。