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 :

Les types d'it�rateurs


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    R�dacteur

    Avatar de Matthieu Brucher
    Profil pro
    D�veloppeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par d�faut Les types d'it�rateurs
    J'ai constat� que les classes d'it�rateurs telles que random_access_iterator n'�taient apparemment pas dans le standard, m�me si elles sont sur le site de la STL chez SGI. Apparemment, on utilise des tag � la place. La question � 0� est comment changer un code qui utilisait ces classes, et pourquoi ont-elles �t� supprim�es ?

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    [pas une r�ponse, j'en sais rien]
    Que veux-tu dire par des tag ?
    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.

  3. #3
    R�dacteur

    Avatar de Matthieu Brucher
    Profil pro
    D�veloppeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par d�faut
    on utilise des random_access_iterator_tag � la place des random_access_iterator

  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
    J'ai toujours vu que des impl�mentations avec des iterator_tag. Mes propres it�rateurs utilisent ces tags.
    Sans avoir cherch�, j'ai jamais rien vu d'autre pour diff�riencier les types d'it�rateurs.
    Il me semble que les tags sont dans le standard, et il me semble bien les avoir vu dans le livre de Stroustrup.

    Donc je vois pas o� est ton probl�me.

  5. #5
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    D�cembre 2003
    Messages
    3 549
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

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

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 3 549
    Par d�faut
    La documentation de la STL de SGI n'est pas la documentation de la biblioth�que standard.

  6. #6
    R�dacteur

    Avatar de Matthieu Brucher
    Profil pro
    D�veloppeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par d�faut
    Citation Envoy� par Charlemagne
    J'ai toujours vu que des impl�mentations avec des iterator_tag. Mes propres it�rateurs utilisent ces tags.
    Sans avoir cherch�, j'ai jamais rien vu d'autre pour diff�riencier les types d'it�rateurs.
    Il me semble que les tags sont dans le standard, et il me semble bien les avoir vu dans le livre de Stroustrup.

    Donc je vois pas o� est ton probl�me.
    En fait, j'ai du code o� le gars n'utilise pas les tags, m�me s'il se disait un fervent adh�rent au standard... Et �a cause des probl�me parce qu'il faut faire des macros pour contourner le pb...
    Et avec les tag, �a donne quoi comme type de code ? C'est pas de l'h�ritage, j'imagine, que l'on fait ?

  7. #7
    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
    A ma connaissance les tags ne servent qu'� faire des "aiguillages".
    C'est comme �a par exemple que la STL applique les algorithmes sp�cialis�s � l'un des 5 types d'it�rateur (random, unidirectionnel, bidirectionnel, input, output) comme pour l'algorithme d' "advance", en appelant des fonctions auxiliaires surcharg�es.

    Quelque chose du genre:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    template<class inIt, class Dist,class ItType> void aux_advance(InIt &it, Dist n, ItType             ) {...}
    template<class inIt, class Dist             > void aux_advance(InIt &it, Dist n, random_iterator_tag) {...}
     
    template<class InIt, class Dist> void advance(InIt &it, Dist n)
    {
      aux_advance(it,n,typepename iterator_traits<InIt>::iterator_category());
    }

  8. #8
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

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

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    Bin, si....

    Extrait du standard (la derni�re ligne de l'exemple est la plus importante) :

    Citation Envoy� par Le standard 24.3.3
    It is often desirable for a template function to find out what is the most specific category of its iterator argument, so that the function can select the most efficient algorithm at compile time. To facilitate this, the library introduces category tag classes which are used as compile time tags for algorithm selection. They are: input_iterator_tag, output_iterator_tag, forward_iterator_tag, bidirectional_iterator_tag and random_access_iterator_tag. For every iterator of type Iterator, iterator_traits<Iterator>::iterator_category must be defined to be
    the most specific category tag that describes the iterator�s behavior.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    namespace std {
    struct input_iterator_tag {};
    struct output_iterator_tag {};
    struct forward_iterator_tag: public input_iterator_tag {};
    struct bidirectional_iterator_tag: public forward_iterator_tag {};
    struct random_access_iterator_tag: public bidirectional_iterator_tag {};
    }
    2 [Example: For a programdefined iterator BinaryTreeIterator, it could be included into the bidirectional iterator category by specializing the iterator_traits template:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    template<class T> struct iterator_traits<BinaryTreeIterator<T> > {
    typedef ptrdiff_t difference_type;
    typedef T value_type;
    typedef T* pointer;
    typedef T& reference;
    typedef bidirectional_iterator_tag iterator_category;
    };
    Typically, however, it would be easier to derive BinaryTreeIterator<T> from
    iterator<bidirectional_iterator_tag,T,ptrdiff_t,T*,T&>. �end example]
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Maxvalue pour les types de var
    Par VincenzoR dans le forum Oracle
    R�ponses: 2
    Dernier message: 23/11/2005, 09h58
  2. les types des champs
    Par zidenne dans le forum Access
    R�ponses: 3
    Dernier message: 18/11/2005, 12h27
  3. [D�butant][Phppgadmin] probl�me avec les types
    Par PoY dans le forum PostgreSQL
    R�ponses: 3
    Dernier message: 19/08/2004, 17h06
  4. Comparer les types de variable
    Par onipif dans le forum ASP
    R�ponses: 11
    Dernier message: 27/05/2004, 18h07
  5. fopen -> diff�rences entres les types d'ouvertur
    Par Patrick PETIT dans le forum C
    R�ponses: 10
    Dernier message: 01/06/2003, 18h19

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