我正在使用双端队列存储从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++;
    }


}


感谢您的帮助,我已经了解了问题

最佳答案

您需要打印出迭代器包含的值,而不是i

while (d2 != deq.end() )
{
    // wrong!
    //cout<<i
    //    <<endl;

    cout << *d2 << endl;

        d2++;
}


作为附带说明,这说明了为什么您应始终将变量的范围限制为尽可能小的范围。如果您的原始循环被声明为:

for(int i = 1; i <= 10; ++i)


然后,稍后尝试(错误地)打印出i可能是编译时错误。

10-08 16:12