IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Differences de for


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 21
    Par défaut Differences de for
    Bonjour,

    1 -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (unsigned int i = 0; i < 10; ++i)
       for (unsigned int k = 0; k < 10; ++k)
        // traitement
    2 -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    unsigned int k;
    for (unsigned int i = 0; i < 10; ++i)
       for (; k < 10; ++k)

    Y'a t'il une difference une fois compile, un plus optimise que l'autre?
    Car il est mieux d utiliser les variables automatiques dans le scope le plus restreint possible mais il est bien de reutiliser la meme variable.
    Avec g++ y a t il donc une difference?

    Merci & bonne journee.

  2. #2
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Citation Envoyé par La Chamelle Voir le message
    Bonjour,

    1 -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (unsigned int i = 0; i < 10; ++i)
       for (unsigned int k = 0; k < 10; ++k)
        // traitement
    2 -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    unsigned int k;
    for (unsigned int i = 0; i < 10; ++i)
       for (; k < 10; ++k)

    Y'a t'il une difference une fois compile, un plus optimise que l'autre?
    Car il est mieux d utiliser les variables automatiques dans le scope le plus restreint possible mais il est bien de reutiliser la meme variable.
    Avec g++ y a t il donc une difference?

    Merci & bonne journee.
    Dans le premier, la portée de k et i sont limités aux boucles.
    En plus clair,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    for (unsigned int i = 0; i < 10; ++i)
     {
      for (unsigned int k = 0; k < 10; ++k)
      {
        //ici k existe et i aussi
      }
       // i existe mais plus k
    }
    //aucun des deux n'existent
    Dans le deuxième code, k existe en dehos de la boucle et sa valeur n'est pas initialisée, elle peut donc valoir n'importe quoi (1,0, mais aussi -1, 42 ou encore 10^12). Sinon, je ne vois pas de différence.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  3. #3
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 640
    Par défaut
    Salut,

    La deuxième syntaxe permet éventuellement de définir une valeur de départ pour k avant la boucle, sous une forme proche de
    int k;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    k= -(z+(2*y));
    for(i=0;i<10;++i)
        for(;k<10;++i) // la valeur de départ de k dépend des valeurs de z et de y
            // traitement
    (k peut parfaitement être défini dans la boucle utilisant i )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Salut,

    La deuxième syntaxe permet éventuellement de définir une valeur de départ pour k avant la boucle, sous une forme proche de
    int k;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    k= -(z+(2*y));
    for(i=0;i<10;++i)
        for(;k<10;++i) // la valeur de départ de k dépend des valeurs de z et de y
            // traitement
    (k peut parfaitement être défini dans la boucle utilisant i )
    On peut faire la même chose en déclarant k dans la boucle.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour et bienvenu,
    Citation Envoyé par La Chamelle Voir le message
    Y'a t'il une difference une fois compile, un plus optimise que l'autre?
    Car il est mieux d utiliser les variables automatiques dans le scope le plus restreint possible mais il est bien de reutiliser la meme variable.
    Avec g++ y a t il donc une difference?
    Si on excepte l'oubli de l'initialisation de k, il n'y a aucune différence. Sache que, au moins pour un type primitif comme un int, le code généré sera le même. Aucune des 2 n'est plus optimale que l'autre. Laisse le compilateur optimiser le code, il le fait toujours mieux que le développeur. Si tu as des problèmes de perfs, instrumentes ton code pour voir où le temps est consommé et concentres-toi sur ce ou ces algorithmes.
    Les petits trucs comme celui que tu présentes ne servent à rien car le compilateur les optimise très bien. Préfères la clareté et la sécurité du code à des astuces qui n'en sont pas.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 21
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Bonjour et bienvenu,

    Si on excepte l'oubli de l'initialisation de k, il n'y a aucune différence. Sache que, au moins pour un type primitif comme un int, le code généré sera le même. Aucune des 2 n'est plus optimale que l'autre. Laisse le compilateur optimiser le code, il le fait toujours mieux que le développeur. Si tu as des problèmes de perfs, instrumentes ton code pour voir où le temps est consommé et concentres-toi sur ce ou ces algorithmes.
    Les petits trucs comme celui que tu présentes ne servent à rien car le compilateur les optimise très bien. Préfères la clareté et la sécurité du code à des astuces qui n'en sont pas.
    Tres bien merci.

    Bonne soiree.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. frames difference for background substraction
    Par recher dans le forum Images
    Réponses: 2
    Dernier message: 22/03/2013, 18h13
  2. For pour changer la largeur de different control
    Par Grooz13 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 23/06/2010, 20h49
  3. Différences entre Delphi et Visual Basic ?
    Par Anonymous dans le forum Débats sur le développement - Le Best Of
    Réponses: 75
    Dernier message: 30/03/2009, 20h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo