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

 C++ Discussion :

copier et incrémenter ?


Sujet :

C++

  1. #1
    Membre averti Avatar de Seabirds
    Homme Profil pro
    Post-doctoral fellow
    Inscrit en
    Avril 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Post-doctoral fellow
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2015
    Messages : 294
    Points : 341
    Points
    341
    Par défaut copier et incrémenter ?
    Salut à toutes et à tous,

    Cela fait plusieurs fois que je suis confronté au cas où je souhaite utiliser conjointement une variable et son incrément :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int previous = 0;
    int next = previous;
    ++next;
    some_function(previous, next);
    Il y a un moyen de copier+incrémenter en une seule étape ? Je n'arrive pas à trouver la réponse sur internet.
    Cordialement,

    [EDIT]
    Oups, mon exemple est nul, l'idée était plutôt d'utiliser un type template, et je voulais que quoiqu'il arrive previous ne soit pas modifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    T previous;
    T next = previous;
    ++next;
    some_function(previous, next);
    Le débutant, lui, ignore qu'il ignore à ce point, il est fier de ses premiers succès, bien plus qu'il n'est conscient de l'étendue de ce qu'il ne sait pas, dès qu'il progresse en revanche, dès que s'accroît ce qu'il sait, il commence à saisir tout ce qui manque encore à son savoir. Qui sait peu ignore aussi très peu. [Roger Pol-Droit]
    Github
    Mon tout premier projet: une bibliothèque de simulation de génétique des populations

  2. #2
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Attention, haute technologie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int next = previous + 1;

  3. #3
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 696
    Points : 2 439
    Points
    2 439
    Par défaut
    Bonjour.

    En passant par la pré incrémentation ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int previous = 0;
    some_function(previous, ++previous); //previous est incrémenté de 1, puis fourni en paramètre à la fonction
    PS: Merci Matt pour la correction.
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un clavardage, on y trouve quelques perles entre deux sessions d'entraides.

  4. #4
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Mais l'ordre d'évaluation des paramètres d'appel de fonction n'étant pas défini, some_function(previous, ++previous) peut tout aussi bien valoir some_function(0, 1) que some_function(1, 1).

  5. #5
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Je ne vois pas bien l'intérêt, à moins que l'objet ne soit de taille importante.
    On peut pour éviter les copies faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    template<class T> struct PrevNext {
    	T  prev;   // copie de la valeur précédente
    	T& next;   // référence sur la nouvelle valeur mise à jour
    	PrevNext(T& x) : prev(x), next(++x) {} // ici l'ordre d'interprétation est garanti
    };
    void some_function( PrevNext<int> z ) {
       ... cout << z.prev;
       ... cout << z.next;
    }
    int main() {
       int x = 0;
       some_function( x );  // => "0 1" et x vaut 1
       some_function( x );  // => "1 2" et x vaut 2
    }

  6. #6
    Membre averti Avatar de Seabirds
    Homme Profil pro
    Post-doctoral fellow
    Inscrit en
    Avril 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Post-doctoral fellow
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2015
    Messages : 294
    Points : 341
    Points
    341
    Par défaut
    Au temps pour moi, l'exemple était présenté avec un int, mais le but était d'effectuer le traitement avec un type template supportant l'opérateur d'incrémentation. L'intérêt était jute de m'assurer qu'il n'existait pas une syntaxe classique qui remplisse ce job (copier l'objet -> incrémenter la copie -> l'assigner). Apparemment non, ce qui répond à ma question.

    La structure de Dalfab est ce qui ressemble le plus à ce que je cherchais, mais vu la lourdeur le jeu n'en vaut peut être effectivement pas la chandelle.

    Merci à tous !
    Le débutant, lui, ignore qu'il ignore à ce point, il est fier de ses premiers succès, bien plus qu'il n'est conscient de l'étendue de ce qu'il ne sait pas, dès qu'il progresse en revanche, dès que s'accroît ce qu'il sait, il commence à saisir tout ce qui manque encore à son savoir. Qui sait peu ignore aussi très peu. [Roger Pol-Droit]
    Github
    Mon tout premier projet: une bibliothèque de simulation de génétique des populations

  7. #7
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    il y a bien une possibilité, d'un point de vue syntaxique, si on ce n'est pas une déclaration.
    x = y étant une expression retournant, pour les types normalement constitués, une référence sur l'assigné, il suffit donc d'incrémenter cette référence:
    L'instruction "magique" est ++(x = y);. Cela dit, c'est assez particulier.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Y a-t-il un point de séquencement dans cette expression? Sinon, il s'agira d'un comportement indéterminé, car x sera modifiée deux fois...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Y a-t-il un point de séquencement dans cette expression? Sinon, il s'agira d'un comportement indéterminé, car x sera modifiée deux fois...
    ?
    x=y assigne la valeur de y à x, puis retourne x
    ensuite on incrémente le tout, soit x
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  10. #10
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Il y a un défaut de séquencement potentiel entre les sous expressions x et y, mais x=y est évaluée avant ++, ce dernier s'applique non pas à l'expression x, mais à la valeur de la parenthèse, qui s'avère être une référence sur x.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

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

Discussions similaires

  1. [XL-2007] Copier et incrémenter le nom d'une feuille
    Par familledacp dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 04/07/2018, 16h40
  2. Copier et incrémenter le nom d'une feuille
    Par remondii dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/12/2014, 23h05
  3. Utiliser le VBA pour copier et incrémenter une feuille
    Par theyang dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 19/10/2014, 21h20
  4. copier/incrémenter les feuilles d'Excel
    Par Biker-Robby dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 22/02/2009, 15h57
  5. Copier coller sans incrémenter
    Par chrichnou051 dans le forum Excel
    Réponses: 2
    Dernier message: 23/04/2008, 16h06

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