Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1545 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  stl iterator

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

stl iterator

n°1859879
weblook$$
Posté le 10-03-2009 à 15:23:20  profilanswer
 

Hi,
 
A priori les iterator son sensés être une abstraction des pointeurs, aussi je me demandais  
pour quelle raison est ce que la définition des itérateurs dans les fichiers de la stl, est-elle spécialisée pour le type pointeur??
 
Merci

mood
Publicité
Posté le 10-03-2009 à 15:23:20  profilanswer
 

n°1859882
Taz
bisounours-codeur
Posté le 10-03-2009 à 15:26:31  profilanswer
 

Tu parles de quoi exactement ?

n°1859891
weblook$$
Posté le 10-03-2009 à 15:37:44  profilanswer
 

En faite j'essaye de comprendre l'intérêt d'avoir spécialisé la classe template iterator pour le type pointeur. ça me parait contre intuitif dans la mesure où les iterators sont sensés être une abstraction des pointeurs. d'où mon interrogation, si il existe une une classe template spécialisé pour le type pointeur, pour quelle type de donnée la classe template non spécialisé peut-elle servir ? des objets peuvent donc être utilisés comme des pointeurs sans en être réellement ?
 
Peut être ce que je ne comprends pas finalement c'est ce qu'on entends par 'abstraction des pointeurs' (et surtout sa finalité)
 
Correction:  oui en faite c'est la classe iterator_traits qui est spécialisé pour le type pointeur, mais je pense pas que ça change beaucoup de choses à ma question


Message édité par weblook$$ le 10-03-2009 à 16:16:29
n°1859916
Taz
bisounours-codeur
Posté le 10-03-2009 à 17:02:01  profilanswer
 

Mais les traits ça n'a rien à voir, tu peux pas regarder une classe au pif et dire sans la comprendre "elle est pas normale". iterator_traits, ça permet justement de faire un pont entre iterator et pointeurs ...


Message édité par Taz le 10-03-2009 à 17:12:30
n°1859923
weblook$$
Posté le 10-03-2009 à 17:17:57  profilanswer
 

Peut être qu'une question qui pourrait me faire avancer dans mon degré de compréhension du couple iterator/iterator_traits serait la suivante:

 

Pourquoi y a t-il une spécialisation de la classe iterator_traits pour le type pointeur?

 

ce qui m'aurait semblé logique est l'implémentation suivante:  Une classe iterator_traits en tout est pour tout servant un décrire un pointeur sur un type T donné.

 

Hors là il y a une classe iterator_traits pour les types qui ne sont pas des pointeurs. Dans la mesure ou les iterateurs généralisent la notion de pointeurs, ça me laisse un peu perplexe qu'il soit nécéssaire de faire un tel distinguo


Message édité par weblook$$ le 10-03-2009 à 17:18:25
n°1859929
Un Program​meur
Posté le 10-03-2009 à 17:25:11  profilanswer
 

Tu as regarde ce que fait le cas non specialise?  Est-ce qu'il a du sens pour des pointeurs?  Est-ce que le cas specialise a du sens pour des pointeurs?

n°1859972
weblook$$
Posté le 10-03-2009 à 18:36:36  profilanswer
 

Tu as regarde ce que fait le cas non specialise?  Est-ce qu'il a du sens pour des pointeurs?

 

bah ui je pense :

 
Code :
  1. template <class Category,
  2.     class T, class Distance = ptrdiff_t,
  3.     class Pointer = T*, class Reference = T &>
  4. struct iterator
  5. {
  6.     typedef T         value_type;
  7.     typedef Distance  difference_type;
  8.     typedef Pointer   pointer;
  9.     typedef Reference reference;
  10.     typedef Category  iterator_category;
  11. };
  12. template <class Iterator>
  13. struct iterator_traits
  14. {
  15.     typedef Iterator::value_type        value_type;
  16.     typedef Iterator::difference_type   difference_type;
  17.     typedef Iterator::pointer           pointer;
  18.     typedef Iterator::reference         reference;
  19.     typedef Iterator::iterator_category iterator_category;
  20. };
 

je vois pas ce qui clocherais en faite, pour le type Iterator::pointer on a bien un T*


Message édité par weblook$$ le 10-03-2009 à 19:43:28
n°1860013
Un Program​meur
Posté le 10-03-2009 à 20:47:11  profilanswer
 

1/ C'est quel compilateur que tu utilises (il manque des typenames pour avoir un code conforme)?
2/ Si tu instancies la version non spécialisée avec int*, elle ne fait que définir des typedefs, et des typedefs du genre:
 
typedef int*::value_type valuetype;
 
chez moi, ça n'a pas de sens.

n°1860144
weblook$$
Posté le 11-03-2009 à 00:48:35  profilanswer
 

Oui je me suis trompé dans les copier coller, j'ai pris ça d'un site par facilité, effectivement tes remarques sont justes.

 

Ok je vois bien le soucis si pas de spécialisation.

 

Dans l'expression
typedef Iterator::pointer  pointer;

 

Iterator peut être un int donc ? Si oui int::value_type ça existe ? Si non, et si ça n'est pas un pointeur, quel peut être le type d'Iterator ?

 

Message cité 1 fois
Message édité par weblook$$ le 11-03-2009 à 09:56:59
n°1860220
Taz
bisounours-codeur
Posté le 11-03-2009 à 11:09:09  profilanswer
 

weblook$$ a écrit :

Iterator peut être un int donc ? Si oui int::value_type ça existe ? Si non, et si ça n'est pas un pointeur, quel peut être le type d'Iterator ?

Cette classe, elle est faite pour tous les T qui respectent un protocole, et elle est spécialisée pour les T*. Si tu l'utilises sur un T qui ne respecte pas le protocole, ça ne compile plus.

mood
Publicité
Posté le 11-03-2009 à 11:09:09  profilanswer
 

n°1860245
weblook$$
Posté le 11-03-2009 à 11:46:36  profilanswer
 

Ok je vois un peu mieux merci !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  stl iterator

 

Sujets relatifs
iterator sur un taleau Citerator_traits et pointeur
problème avec les std iteratoriterator()
Implémenter l'interface Iterator[résolu] [qst] [débutant] Opérations pdt un parcours avec Iterator ?
Problème avec les Vectors ( return ((vector<_Key>::iterator)NULL;)Iterator a la maison ou au front?
IteratorBufferedReader qui implémente Iterator
Plus de sujets relatifs à : stl iterator


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)