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 :

un moyen pour un operateur[][]


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 63
    Par défaut un moyen pour un operateur[][]
    Bonjour je cherche un moyen pour surcharger une classe Tableau avec l'operateur [] de façon a pouvoir faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    valeur = tableau[ligne][colonne];
    //mais aussi:
    tableau[ligne][colonne] = valeur;
    Mais je ne vois vraiment pas comment faire

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    Ce n'est pas possible directement.

    Néanmoins 2 possibilités:

    1) surcharger l'opérateur () avec 2 paramètres, l'accès à un élément devient donc X(i,j)

    2) Passer par une classe proxy.
    L'opérateur [] de ta matrice renvoyant une class proxy intermédiaire représentant un vecteur.
    Ta classe vecteur ayant elle même un opérateur [] pour l'accès à un élément.

    La 2ème méthode est plus délicate à mettre en oeuvre de manière efficace.
    Chaque méthode a ses avantages et inconvénients.
    Une bibliothèque complète proposera les deux...

  3. #3
    Membre éclairé

    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 78
    Par défaut
    Citation Envoyé par Charlemagne Voir le message
    2) Passer par une classe proxy.
    L'opérateur [] de ta matrice renvoyant une class proxy intermédiaire représentant un vecteur.
    Ta classe vecteur ayant elle même un opérateur [] pour l'accès à un élément.

    La 2ème méthode est plus délicate à mettre en oeuvre de manière efficace.
    Quels sont ces problemes d'efficacité dont tu parles ?

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    Citation Envoyé par Aszarsha
    Quels sont ces problemes d'efficacité dont tu parles ?
    Faire un proxy demande de la technique pour ne pas perdre en vitesse d'exécution par rapport à la méthode de calcul direct de la surcharge de l'opérateur ().
    Et je suppose que jpcohen ne connaît justement pas cette méthode puisqu'il n'a pas envisagé cette possibilité.
    En général plutôt que de surcharger l'opérateur [], on propose des fonctions aux noms plus explicites pour accéder aux lignes/colonnes.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 63
    Par défaut
    Citation Envoyé par Charlemagne Voir le message
    Faire un proxy demande de la technique pour ne pas perdre en vitesse d'exécution par rapport à la méthode de calcul direct de la surcharge de l'opérateur ().
    Et je suppose que jpcohen ne connaît justement pas cette méthode puisqu'il n'a pas envisagé cette possibilité.
    En général plutôt que de surcharger l'opérateur [], on propose des fonctions aux noms plus explicites pour accéder aux lignes/colonnes.
    Désolé de te décevoir mais j'étais partis sur une méthode de proxy sans savoir que ça s'appelait comme ça :p Ce qui d'ailleur m'a conforté dans mon idée ^^

    Maintenant c'est clair qu'étant donné mon niveau ça doit pas etre super optimisé ^^ Enfin je fais au possible je verrais ce que ça donne déja à la compilation du projet.

    Par contre si tu as des "trucs" pour augmenter la vitesse d'execution, que je pourrais metre en pratique, je suis preneur.

    En tout cas merci a toi.

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    Citation Envoyé par jpcohen
    Par contre si tu as des "trucs" pour augmenter la vitesse d'execution, que je pourrais metre en pratique, je suis preneur.
    Ca dépend de ton implémentation de matrice.
    Dans l'ensemble les trucs sont:
    -inliner tout
    -calculer et stocker les offset dès la création de la classe proxy
    -aucune copie de contenu pour la classe proxy, donc utilisation de références et/ou pointeurs

    Et il n'est pas interdit de comparer les perfs des 2 méthodes.
    Grâce au stockage des offsets, cette méthode est généralement plus rapide quand plusieurs accès mémoires consécutifs sont faits sur le même proxy.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    template<class T>
    class matrix_row
    {
      ...
    };
     
    template<class V>
    class matrix
    {
      typedef V value_type;
    ...
      typedef matrix_row<matrix      > row_type;
      typedef matrix_row<const matrix> const_row_type;
    ...
      row_type       row(int i)       { return row_type      (*this,i); }
      const_row_type row(int i) const { return const_row_type(*this,i); }
    };

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 63
    Par défaut
    Ok, joli bout de code.

    Merci pour ton aide ;-)

  8. #8
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    La premiere méthode est décrite dans la faq cpp et je pense que tu te ferra beaucoup moins suer pour un résultat vraiment intuitif et rapide (je pense que c'est ton but).

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

Discussions similaires

  1. [Ergonomie] Moyen pour saisir une heure dans une page web ?
    Par mic79 dans le forum Webdesign & Ergonomie
    Réponses: 7
    Dernier message: 16/12/2005, 14h03
  2. Réponses: 3
    Dernier message: 08/12/2005, 19h19
  3. Un moyen pour compresser une string ?
    Par Bruno13 dans le forum Langage
    Réponses: 9
    Dernier message: 11/11/2005, 05h05
  4. Réponses: 6
    Dernier message: 19/09/2005, 15h35
  5. [Applet]Y a-t-il un moyen pour reserver de la RAM ?
    Par JHelp dans le forum Applets
    Réponses: 2
    Dernier message: 26/03/2005, 09h17

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