OVH Cloud OVH Cloud

Iterateurs : comment définir difference_type ?

2 réponses
Avatar
Helfer Thomas
J'aimerai définir un itérateur contenant deux pointeurs a et b :

class MonIterateur
{
double * a;
double * b;
....
};

Si p est une instance de MonIterateur, ++p est équivalent à ++a et ++b,
etc...

J'aimerai définir la classe iterator_traits<MonIterateur>, mais je ne
sais pas comment définir l'entrée difference_type.

Quelqu'un pourrait-il m'aider ?

Cordialement,

Helfer Thomas

2 réponses

Avatar
kanze
Helfer Thomas wrote:
J'aimerai définir un itérateur contenant deux pointeurs a et b :

class MonIterateur
{
double * a;
double * b;
....
};

Si p est une instance de MonIterateur, ++p est équivalent à
++a et ++b, etc...

J'aimerai définir la classe iterator_traits<MonIterateur>,
mais je ne sais pas comment définir l'entrée difference_type.


diffptr_t.

Quelqu'un pourrait-il m'aider ?


À ta place, je jetterais un coup d'oeil à Boost.Iterators. Ils
ont beaucoup fait pour rendre la définition d'un itérateur plus
facile.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Avatar
kanze
Helfer Thomas wrote:
J'aimerai définir un itérateur contenant deux pointeurs a et b :

class MonIterateur
{
double * a;
double * b;
....
};

Si p est une instance de MonIterateur, ++p est équivalent à ++a et ++ b,
etc...

J'aimerai définir la classe iterator_traits<MonIterateur>, mais je ne
sais pas comment définir l'entrée difference_type.


J'ai oublié de le dire dans ma réponse précédante, mais
normalement, tu ne définis pas d'iterator_traits. Tu mets des
typedefs dans ton iterator, et la version générique
d'iterator_traits marche. (Une façon simple de le faire, c'est
d'hériter de std::iterator<>.)

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34