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 :

minimiser mes lignes de codes


Sujet :

C++

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut minimiser mes lignes de codes
    Bonjour, j'ai différentes fonctions (surcharge de l'opérateur << )et je pense qu'il est possible de tout faire en une seule, mais je ne sais pas comment. Voici mes fonctions :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    /* surcharge de l'operateur << pour un std::vector */
    template <typename T> std::ostream & operator<<(std::ostream & os,const std::vector<T> & v)
    {
      if(v.size() == 0)
        os << "empty std::vector" << std::endl;
      else
      {
        std::ostream_iterator< T > output( os, " " );
        std::copy( v.begin(), v.end(), output );
      }
     
      return os;
    }
     
    /* surcharge de l'operateur << pour un std::set */
    template <typename T> std::ostream & operator<<(std::ostream & os,const std::set<T> & s)
    {
      if(s.size() == 0)
        os << "empty std::set" << std::endl;
      else
      {
        std::ostream_iterator< T > output( os, " " );
        std::copy( s.begin(), s.end(), output );
      }
     
      return os;
    }
     
    /* surcharge de l'operateur << pour un std::list */
    template <typename T> std::ostream & operator<<(std::ostream & os,const std::list<T> & l)
    {
      if(l.size() == 0)
        os << "empty std::list" << std::endl;
      else
      {
        std::ostream_iterator< T > output( os, " " );
        std::copy( l.begin(), l.end(), output );
      }
     
      return os;
    }
     
    /* surcharge de l'operateur << pour un std::multiset */
    template <typename T> std::ostream & operator<<(std::ostream & os,const std::multiset<T> & ms)
    {
      if(ms.size() == 0)
        os << "empty std::multiset" << std::endl;
      else
      {
        std::ostream_iterator< T > output( os, " " );
        std::copy( ms.begin(), ms.end(), output );
      }
     
      return os;
    }
     
    /* surcharge de l'operateur << pour un std::pair */
    template <class T1, class T2> std::ostream & operator<<(std::ostream & os,const std::pair<T1, T2> & p)
    {
      os << p.first << " " << p.second << std::endl;
      return os;
    }
    Je pense que la surchage de l'operateur << pour une pair peut sortir du lot (car il y a 2 templates). Mais pour un vector, list, set, multiset comment tout faire en une seule fonction ?

    Merci d'avance

  2. #2
    screetch
    Invité(e)
    Par défaut
    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
    template< typename T,
              typename Allocator,
              template< typename, typename > class Container >
    std::ostream & operator<<(std::ostream & os,const Container<T, Allocator>& ms)
    {
      if(ms.size() == 0)
        os << "empty container" << std::endl;
      else
      {
        std::ostream_iterator< T > output( os, " " );
        std::copy( ms.begin(), ms.end(), output );
      }
     
      return os;
    }
    attention c'est pas supportés parfaitement par tous les compilateurs (g++ 3.4 a du mal)

    [edit] il t'en faut un different pour le set/multiset a cause de la difference de signature du template

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Points : 1 176
    Points
    1 176
    Par défaut
    C'est bizarre non de le faire pour des types génériques? Pour des types à toi ok, mais pour tous les containers ...

    autant faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::copy( v.begin(), v.end(), std::ostream_iterator< T > output( os, " " ) );
    dans ton code

    ou un bon vieux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::foreach( v.begin(), v.end(), std::cout << boost::lambda::_1 << " " );

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    bonjour,

    nikko34, je préfère écrire directement cout<<mon_vector<<endl; plutôt que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::copy( v.begin(), v.end(), std::ostream_iterator< T > output( os, " " ) );
    screetch : merci pour ton info. Je n'avais pas pensé au template de template...

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

Discussions similaires

  1. [XL-2010] Ligne de code posant problème dans tous mes programmes
    Par yaya.gaga dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 11/11/2014, 20h55
  2. Réponses: 9
    Dernier message: 22/04/2014, 22h15
  3. Mes 5 lignes de code bouffent de la mémoire
    Par Interruption13h dans le forum C++Builder
    Réponses: 6
    Dernier message: 02/04/2007, 16h10
  4. [netbeans][Linux] Nombre de lignes de codes
    Par sylvain_neus dans le forum NetBeans
    Réponses: 5
    Dernier message: 13/08/2004, 10h09
  5. Calculeur de ligne de code
    Par Bernybon dans le forum Autres éditeurs
    Réponses: 9
    Dernier message: 05/03/2004, 16h29

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