Prenons, pour fixer les idées, un
std::vector<int> v;
Avec un iterator, je peux modifier non seulement l'objet pointé, mais
aussi la structure du vector<>, par exemple rajouter un élément et
ainsi invalider tous les itérateurs.
Avec un const_iterator, je ne peux rien modifier du tout.
J'ai l'impression confuse qu'un semi_const_iterator, qui permettrait
de modifier l'objet pointé mais pas la structure du vector<>, serait
utile.
D'où ma question : y a-t-il un manque dans la STL ? Ou une erreur
d'analyse de ma part ? Ou est-ce que je ferais mieux de retourner me
coucher au lieu de couper les cheveux en 42 ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
mb
Fabien LE LEZ ha scritto:
Bonjour,
Prenons, pour fixer les idées, un std::vector<int> v;
Avec un iterator, je peux modifier non seulement l'objet pointé, mais aussi la structure du vector<>, par exemple rajouter un élément et ainsi invalider tous les itérateurs.
Avec un const_iterator, je ne peux rien modifier du tout.
J'ai l'impression confuse qu'un semi_const_iterator, qui permettrait de modifier l'objet pointé mais pas la structure du vector<>, serait utile.
D'où ma question : y a-t-il un manque dans la STL ? Ou une erreur d'analyse de ma part ? Ou est-ce que je ferais mieux de retourner me coucher au lieu de couper les cheveux en 42 ?
Merci d'avance pour vos avis.
C'est une limitation connue de la bibliotheque STL, elle meme etant la consequence d'une inadequation entre le langage C++ et la programmation moderne.
Une solution est de passer a CSharp/.NET
Si tu es deja programmeur en C++, le passage est tres facile. Dans le cas contraire, ce qui semble etre le cas compte tenu de la teneur de ta question, tu trouveras de tres bons tutoriaux a ton niveau de debutant.
Il ne faut pas s'attacher au passe lorsque l'informatique moderne offre de si belles opportunites d'avenir.
MB
--
questo articolo e` stato inviato via web dal servizio gratuito http://www.newsland.it/news segnala gli abusi ad
Fabien LE LEZ ha scritto:
Bonjour,
Prenons, pour fixer les idées, un
std::vector<int> v;
Avec un iterator, je peux modifier non seulement l'objet pointé, mais
aussi la structure du vector<>, par exemple rajouter un élément et
ainsi invalider tous les itérateurs.
Avec un const_iterator, je ne peux rien modifier du tout.
J'ai l'impression confuse qu'un semi_const_iterator, qui permettrait
de modifier l'objet pointé mais pas la structure du vector<>, serait
utile.
D'où ma question : y a-t-il un manque dans la STL ? Ou une erreur
d'analyse de ma part ? Ou est-ce que je ferais mieux de retourner me
coucher au lieu de couper les cheveux en 42 ?
Merci d'avance pour vos avis.
C'est une limitation connue de la bibliotheque STL, elle meme etant
la consequence d'une inadequation entre le langage C++ et la programmation
moderne.
Une solution est de passer a CSharp/.NET
Si tu es deja programmeur en C++, le passage est tres facile. Dans le
cas contraire, ce qui semble etre le cas compte tenu de la teneur
de ta question, tu trouveras de tres bons tutoriaux a ton niveau de
debutant.
Il ne faut pas s'attacher au passe lorsque l'informatique moderne
offre de si belles opportunites d'avenir.
MB
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad abuse@newsland.it
Prenons, pour fixer les idées, un std::vector<int> v;
Avec un iterator, je peux modifier non seulement l'objet pointé, mais aussi la structure du vector<>, par exemple rajouter un élément et ainsi invalider tous les itérateurs.
Avec un const_iterator, je ne peux rien modifier du tout.
J'ai l'impression confuse qu'un semi_const_iterator, qui permettrait de modifier l'objet pointé mais pas la structure du vector<>, serait utile.
D'où ma question : y a-t-il un manque dans la STL ? Ou une erreur d'analyse de ma part ? Ou est-ce que je ferais mieux de retourner me coucher au lieu de couper les cheveux en 42 ?
Merci d'avance pour vos avis.
C'est une limitation connue de la bibliotheque STL, elle meme etant la consequence d'une inadequation entre le langage C++ et la programmation moderne.
Une solution est de passer a CSharp/.NET
Si tu es deja programmeur en C++, le passage est tres facile. Dans le cas contraire, ce qui semble etre le cas compte tenu de la teneur de ta question, tu trouveras de tres bons tutoriaux a ton niveau de debutant.
Il ne faut pas s'attacher au passe lorsque l'informatique moderne offre de si belles opportunites d'avenir.
MB
--
questo articolo e` stato inviato via web dal servizio gratuito http://www.newsland.it/news segnala gli abusi ad
Michaël Delva
Si tu es deja programmeur en C++, le passage est tres facile. Dans le cas contraire, ce qui semble etre le cas compte tenu de la teneur de ta question, tu trouveras de tres bons tutoriaux a ton niveau de debutant.
:-D
Si tu es deja programmeur en C++, le passage est tres facile. Dans le
cas contraire, ce qui semble etre le cas compte tenu de la teneur
de ta question, tu trouveras de tres bons tutoriaux a ton niveau de
debutant.
Si tu es deja programmeur en C++, le passage est tres facile. Dans le cas contraire, ce qui semble etre le cas compte tenu de la teneur de ta question, tu trouveras de tres bons tutoriaux a ton niveau de debutant.
:-D
Fabien LE LEZ
On 11 Aug 2004 13:23:29 GMT, "Michaël Delva" :
:-D
Ça s'appelle un troll (qui ne m'a guère étonné d'ailleurs, vu l'auteur...)
On 11 Aug 2004 13:23:29 GMT, "Michaël Delva"
<michael_delva@i_cant_remember.com>:
:-D
Ça s'appelle un troll (qui ne m'a guère étonné d'ailleurs, vu
l'auteur...)
Ça s'appelle un troll (qui ne m'a guère étonné d'ailleurs, vu l'auteur...)
kanze
Fabien LE LEZ wrote in message news:...
Prenons, pour fixer les idées, un std::vector<int> v;
Avec un iterator, je peux modifier non seulement l'objet pointé, mais aussi la structure du vector<>, par exemple rajouter un élément et ainsi invalider tous les itérateurs.
Comment ? Avec un itérateur, tu peux visiter les éléments, mais non modifier la topologie de la collection.
Avec un const_iterator, je ne peux rien modifier du tout.
J'ai l'impression confuse qu'un semi_const_iterator, qui permettrait de modifier l'objet pointé mais pas la structure du vector<>, serait utile.
Je crois que la distinction pourrait être utile dans le cas des références à des std::vector. Je ne vois pas de rélévance pour les itérateurs.
D'où ma question : y a-t-il un manque dans la STL ?
Je ne vois pas de solution à l'intérieur d'une bibliothèque. D'ailleur, je ne vois pas de solution en général -- il faudrait que le langage supporte deux degrées de const. Mais alors, pourquoi s'arrêter à deux ?
Une solution possible serait d'offrir un « view » du vector, quelque chose du genre :
value_type& operator[]( size_t index ) { return myCollection[ index ] ; }
// ...
private: Collection* myCollection ; // pointeur afin de supporter l'affectation. } ;
Pour être vraiment général, je crois qu'il faudrait de la méta-programmation pour que des typedef des types tels que reverse_iterator soient conditionnels. (Note que ce n'est pas un problème pour les fonctions. Si tu n'appelles pas la fonction, elle ne doit pas être instantiée. Et donc, tu ne dois pas avoir d'erreur du fait qu'elle n'existe pas dans Collection.)
Un problème potentiel avec les views : la durée de vie des objets. C'est assez facile à se rétrouver avec un view dont la collection a été détruite. Mais sinon, c'est un idiome très puissant.
-- James Kanze GABI Software http://www.gabi-soft.fr 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
Fabien LE LEZ <gramster@gramster.com> wrote in message
news:<82fjh05qn7957hgjogpikg7itdpkhivevd@4ax.com>...
Prenons, pour fixer les idées, un
std::vector<int> v;
Avec un iterator, je peux modifier non seulement l'objet pointé, mais
aussi la structure du vector<>, par exemple rajouter un élément et
ainsi invalider tous les itérateurs.
Comment ? Avec un itérateur, tu peux visiter les éléments, mais non
modifier la topologie de la collection.
Avec un const_iterator, je ne peux rien modifier du tout.
J'ai l'impression confuse qu'un semi_const_iterator, qui permettrait
de modifier l'objet pointé mais pas la structure du vector<>, serait
utile.
Je crois que la distinction pourrait être utile dans le cas des
références à des std::vector. Je ne vois pas de rélévance pour les
itérateurs.
D'où ma question : y a-t-il un manque dans la STL ?
Je ne vois pas de solution à l'intérieur d'une bibliothèque. D'ailleur,
je ne vois pas de solution en général -- il faudrait que le langage
supporte deux degrées de const. Mais alors, pourquoi s'arrêter à deux ?
Une solution possible serait d'offrir un « view » du vector, quelque
chose du genre :
value_type& operator[]( size_t index )
{
return myCollection[ index ] ;
}
// ...
private:
Collection* myCollection ;
// pointeur afin de supporter l'affectation.
} ;
Pour être vraiment général, je crois qu'il faudrait de la
méta-programmation pour que des typedef des types tels que
reverse_iterator soient conditionnels. (Note que ce n'est pas un
problème pour les fonctions. Si tu n'appelles pas la fonction, elle ne
doit pas être instantiée. Et donc, tu ne dois pas avoir d'erreur du fait
qu'elle n'existe pas dans Collection.)
Un problème potentiel avec les views : la durée de vie des objets. C'est
assez facile à se rétrouver avec un view dont la collection a été
détruite. Mais sinon, c'est un idiome très puissant.
--
James Kanze GABI Software http://www.gabi-soft.fr
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
Prenons, pour fixer les idées, un std::vector<int> v;
Avec un iterator, je peux modifier non seulement l'objet pointé, mais aussi la structure du vector<>, par exemple rajouter un élément et ainsi invalider tous les itérateurs.
Comment ? Avec un itérateur, tu peux visiter les éléments, mais non modifier la topologie de la collection.
Avec un const_iterator, je ne peux rien modifier du tout.
J'ai l'impression confuse qu'un semi_const_iterator, qui permettrait de modifier l'objet pointé mais pas la structure du vector<>, serait utile.
Je crois que la distinction pourrait être utile dans le cas des références à des std::vector. Je ne vois pas de rélévance pour les itérateurs.
D'où ma question : y a-t-il un manque dans la STL ?
Je ne vois pas de solution à l'intérieur d'une bibliothèque. D'ailleur, je ne vois pas de solution en général -- il faudrait que le langage supporte deux degrées de const. Mais alors, pourquoi s'arrêter à deux ?
Une solution possible serait d'offrir un « view » du vector, quelque chose du genre :
value_type& operator[]( size_t index ) { return myCollection[ index ] ; }
// ...
private: Collection* myCollection ; // pointeur afin de supporter l'affectation. } ;
Pour être vraiment général, je crois qu'il faudrait de la méta-programmation pour que des typedef des types tels que reverse_iterator soient conditionnels. (Note que ce n'est pas un problème pour les fonctions. Si tu n'appelles pas la fonction, elle ne doit pas être instantiée. Et donc, tu ne dois pas avoir d'erreur du fait qu'elle n'existe pas dans Collection.)
Un problème potentiel avec les views : la durée de vie des objets. C'est assez facile à se rétrouver avec un view dont la collection a été détruite. Mais sinon, c'est un idiome très puissant.
-- James Kanze GABI Software http://www.gabi-soft.fr 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
Fabien LE LEZ
On 12 Aug 2004 01:06:51 -0700, :
Comment ? Avec un itérateur, tu peux visiter les éléments, mais non modifier la topologie de la collection.
Il est possible que mon problème vienne de l'abus de for (...::iterator i= ....begin();...)
-- ;-)
On 12 Aug 2004 01:06:51 -0700, kanze@gabi-soft.fr:
Comment ? Avec un itérateur, tu peux visiter les éléments, mais non
modifier la topologie de la collection.
Il est possible que mon problème vienne de l'abus de
for (...::iterator i= ....begin();...)
Comment ? Avec un itérateur, tu peux visiter les éléments, mais non modifier la topologie de la collection.
Il est possible que mon problème vienne de l'abus de for (...::iterator i= ....begin();...)
-- ;-)
James Kanze
Fabien LE LEZ writes:
|> On 12 Aug 2004 01:06:51 -0700, :
|> >Comment ? Avec un itérateur, tu peux visiter les éléments, mais non |> >modifier la topologie de la collection.
|> Il est possible que mon problème vienne de l'abus de |> for (...::iterator i= ....begin();...)
Dans quel sens ? Avec l'itérateur, tu ne peux pas modifier la topologie de la collection. Et avec la collection même, tu peux modifier tout ce que tu veux, que l'itérateur soit const ou non.
-- James Kanze 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
Fabien LE LEZ <gramster@gramster.com> writes:
|> On 12 Aug 2004 01:06:51 -0700, kanze@gabi-soft.fr:
|> >Comment ? Avec un itérateur, tu peux visiter les éléments, mais non
|> >modifier la topologie de la collection.
|> Il est possible que mon problème vienne de l'abus de
|> for (...::iterator i= ....begin();...)
Dans quel sens ? Avec l'itérateur, tu ne peux pas modifier la topologie
de la collection. Et avec la collection même, tu peux modifier tout ce
que tu veux, que l'itérateur soit const ou non.
--
James Kanze
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
|> >Comment ? Avec un itérateur, tu peux visiter les éléments, mais non |> >modifier la topologie de la collection.
|> Il est possible que mon problème vienne de l'abus de |> for (...::iterator i= ....begin();...)
Dans quel sens ? Avec l'itérateur, tu ne peux pas modifier la topologie de la collection. Et avec la collection même, tu peux modifier tout ce que tu veux, que l'itérateur soit const ou non.
-- James Kanze 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