(Marc Espie) writes:
[...]
> Si tu imposes a l'implementation qu'on peut retrouver le
> conteneur a partir de l'iterateur, ca augmente fortement la
> taille de l'iterateur.
Surtout que cela me semble donner lieu à du code spaghetti.
es...@lain.home (Marc Espie) writes:
[...]
> Si tu imposes a l'implementation qu'on peut retrouver le
> conteneur a partir de l'iterateur, ca augmente fortement la
> taille de l'iterateur.
Surtout que cela me semble donner lieu à du code spaghetti.
(Marc Espie) writes:
[...]
> Si tu imposes a l'implementation qu'on peut retrouver le
> conteneur a partir de l'iterateur, ca augmente fortement la
> taille de l'iterateur.
Surtout que cela me semble donner lieu à du code spaghetti.
J'aimerais juste résumer pour être sûr d'avoir une meilleure app roche
des itérateurs, et d'avoir pleinement conscience de leur nature profond e:
- un conteneur standard ne traque pas ces itérateurs
- un itérateur ne peut pas connaître sa validité (puisqu'il n'es t pas
traqué, un conteneur ne peut pas invalider l'itérateur, à l'instar du
pointeur qui ne peut pas être invalidé après que l'objet pointé e st
supprimé)
- un itérateur ne sait rien du conteneur, il connait juste les
éléments itérés et comment les accéder les uns par rapport aux autres
- les itérateurs sont conçus pour être éphémères et utilis és
immédiatement, donc il faut éviter au maximum le trafic d'itérateur s.
Une dernière question : pourquoi les algorithmes ne prennent pas des
paires d'itérateurs ?
J'aimerais juste résumer pour être sûr d'avoir une meilleure app roche
des itérateurs, et d'avoir pleinement conscience de leur nature profond e:
- un conteneur standard ne traque pas ces itérateurs
- un itérateur ne peut pas connaître sa validité (puisqu'il n'es t pas
traqué, un conteneur ne peut pas invalider l'itérateur, à l'instar du
pointeur qui ne peut pas être invalidé après que l'objet pointé e st
supprimé)
- un itérateur ne sait rien du conteneur, il connait juste les
éléments itérés et comment les accéder les uns par rapport aux autres
- les itérateurs sont conçus pour être éphémères et utilis és
immédiatement, donc il faut éviter au maximum le trafic d'itérateur s.
Une dernière question : pourquoi les algorithmes ne prennent pas des
paires d'itérateurs ?
J'aimerais juste résumer pour être sûr d'avoir une meilleure app roche
des itérateurs, et d'avoir pleinement conscience de leur nature profond e:
- un conteneur standard ne traque pas ces itérateurs
- un itérateur ne peut pas connaître sa validité (puisqu'il n'es t pas
traqué, un conteneur ne peut pas invalider l'itérateur, à l'instar du
pointeur qui ne peut pas être invalidé après que l'objet pointé e st
supprimé)
- un itérateur ne sait rien du conteneur, il connait juste les
éléments itérés et comment les accéder les uns par rapport aux autres
- les itérateurs sont conçus pour être éphémères et utilis és
immédiatement, donc il faut éviter au maximum le trafic d'itérateur s.
Une dernière question : pourquoi les algorithmes ne prennent pas des
paires d'itérateurs ?
- un itérateur ne sait rien du conteneur, il connait juste les
éléments itérés et comment les accéder les uns par rapport aux autres
Selon la norme. Dans la pratique, elle ne interdit rien de tout
ça non plus ; la plupart des implémentations aujourd'hui ont
deux modes, et dans la mode debug, la collection traque bien les
itérateurs, etc., afin de pouvoir détecter les cas de
comportement indéfini, et de le définir.
Une dernière question : pourquoi les algorithmes ne prennent pas des
paires d'itérateurs ?
La vraie question, c'est pourquoi il en faut deux. Ça rend
beaucoup de choses intéressantes (comme des itérateurs
filtrants) nettement plus compliquées.
- un itérateur ne sait rien du conteneur, il connait juste les
éléments itérés et comment les accéder les uns par rapport aux autres
Selon la norme. Dans la pratique, elle ne interdit rien de tout
ça non plus ; la plupart des implémentations aujourd'hui ont
deux modes, et dans la mode debug, la collection traque bien les
itérateurs, etc., afin de pouvoir détecter les cas de
comportement indéfini, et de le définir.
Une dernière question : pourquoi les algorithmes ne prennent pas des
paires d'itérateurs ?
La vraie question, c'est pourquoi il en faut deux. Ça rend
beaucoup de choses intéressantes (comme des itérateurs
filtrants) nettement plus compliquées.
- un itérateur ne sait rien du conteneur, il connait juste les
éléments itérés et comment les accéder les uns par rapport aux autres
Selon la norme. Dans la pratique, elle ne interdit rien de tout
ça non plus ; la plupart des implémentations aujourd'hui ont
deux modes, et dans la mode debug, la collection traque bien les
itérateurs, etc., afin de pouvoir détecter les cas de
comportement indéfini, et de le définir.
Une dernière question : pourquoi les algorithmes ne prennent pas des
paires d'itérateurs ?
La vraie question, c'est pourquoi il en faut deux. Ça rend
beaucoup de choses intéressantes (comme des itérateurs
filtrants) nettement plus compliquées.
Le 13/08/2010 18:16, Gabriel Dos Reis a écrit :
> > - un itérateur ne peut pas connaître sa validité
> > (puisqu'il n'est pas traqué, un conteneur ne peut pas
> > invalider l'itérateur, à l'instar du pointeur qui ne
> > peut pas être invalidé après que l'objet pointé est
> > supprimé)
> Ce n'est pas exactement vrai. Il y a bien la notion de
> « singular iterator » Ce qui est vrai, par contre, c'est
> que la norme ne fournit pas de fonction générale pour tester
> la validité d'un itérateur.
Là encore, c'est l'équivalent du pointeur nul. La seule chose
qu'on peut faire c'est comparer avec l'équivalent du pointeur
null. On ne peut pas demander bool(it) comme on le ferait avec
un smart pointer.
> > Une dernière question : pourquoi les algorithmes ne
> > prennent pas des paires d'itérateurs ?
> ou un conteneur. C'es une bonne question.
> La réponse traditionnelle est le manque de propostion dans ce sens.
> Certaines personnes diront qu'il y a certains idiomes qui ne sont pas
> possible avec les paires d'itérateurs. Ma réponse est « et alors ? »
> On ne peut pas faire de la choucroute avec ls itérateurs non plus.
Par curiosité, quels idiomes sont impossibles avec la paire
d'itérateurs ?
Le 13/08/2010 18:16, Gabriel Dos Reis a écrit :
> > - un itérateur ne peut pas connaître sa validité
> > (puisqu'il n'est pas traqué, un conteneur ne peut pas
> > invalider l'itérateur, à l'instar du pointeur qui ne
> > peut pas être invalidé après que l'objet pointé est
> > supprimé)
> Ce n'est pas exactement vrai. Il y a bien la notion de
> « singular iterator » Ce qui est vrai, par contre, c'est
> que la norme ne fournit pas de fonction générale pour tester
> la validité d'un itérateur.
Là encore, c'est l'équivalent du pointeur nul. La seule chose
qu'on peut faire c'est comparer avec l'équivalent du pointeur
null. On ne peut pas demander bool(it) comme on le ferait avec
un smart pointer.
> > Une dernière question : pourquoi les algorithmes ne
> > prennent pas des paires d'itérateurs ?
> ou un conteneur. C'es une bonne question.
> La réponse traditionnelle est le manque de propostion dans ce sens.
> Certaines personnes diront qu'il y a certains idiomes qui ne sont pas
> possible avec les paires d'itérateurs. Ma réponse est « et alors ? »
> On ne peut pas faire de la choucroute avec ls itérateurs non plus.
Par curiosité, quels idiomes sont impossibles avec la paire
d'itérateurs ?
Le 13/08/2010 18:16, Gabriel Dos Reis a écrit :
> > - un itérateur ne peut pas connaître sa validité
> > (puisqu'il n'est pas traqué, un conteneur ne peut pas
> > invalider l'itérateur, à l'instar du pointeur qui ne
> > peut pas être invalidé après que l'objet pointé est
> > supprimé)
> Ce n'est pas exactement vrai. Il y a bien la notion de
> « singular iterator » Ce qui est vrai, par contre, c'est
> que la norme ne fournit pas de fonction générale pour tester
> la validité d'un itérateur.
Là encore, c'est l'équivalent du pointeur nul. La seule chose
qu'on peut faire c'est comparer avec l'équivalent du pointeur
null. On ne peut pas demander bool(it) comme on le ferait avec
un smart pointer.
> > Une dernière question : pourquoi les algorithmes ne
> > prennent pas des paires d'itérateurs ?
> ou un conteneur. C'es une bonne question.
> La réponse traditionnelle est le manque de propostion dans ce sens.
> Certaines personnes diront qu'il y a certains idiomes qui ne sont pas
> possible avec les paires d'itérateurs. Ma réponse est « et alors ? »
> On ne peut pas faire de la choucroute avec ls itérateurs non plus.
Par curiosité, quels idiomes sont impossibles avec la paire
d'itérateurs ?