0
votes

Boucle infinie avec une "deque" en C ++

J'ai un problème avec le code suivant:

#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 commentaires

Où est Val mis à jour après son attribution initiale avant la première itération du pour boucle?


3 Réponses :


4
votes

Vous ne mettez jamais à jour l'entier val . Il n'est initialisé que dans la première partie de votre boucle pour la boucle et, lorsque vous avez copié la première valeur du conteneur, celui-ci continue d'être imprimé.

Vous pouvez résoudre ce par exemple. par xxx


0 commentaires

1
votes

C'est parce que vous ne modifiez jamais la valeur de val . Vous l'initialisez comme int Val = q.front () et c'était la dernière fois que cela a été modifié.

soit modifier val , par ex. q.push_back (++ val); ou imprimer le contenu de deque q . .


0 commentaires

1
votes

Il y a deux problèmes avec la boucle.

Le premier est que la variable VAL n'est pas modifiée dans la boucle et sa valeur initiale définie dans la partie introduction de la boucle est toujours émise. P>

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


0 commentaires