C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

iterator = NULL
Goto page 1, 2, 3, 4  Next
 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Henri de Solages
Guest





PostPosted: Wed Sep 07, 2005 1:38 pm    Post subject: iterator = NULL Reply with quote



Bonjour.

Est-il légal d'assigner la valeur NULL à un itérateur ?

--
Get rid of the final underscore of my address to use it.
Back to top
Gabriel Dos Reis
Guest





PostPosted: Wed Sep 07, 2005 1:45 pm    Post subject: Re: iterator = NULL Reply with quote



Henri de Solages <solages (AT) CICT (DOT) fr_> writes:

Quote:
Bonjour.

Est-il légal d'assigner la valeur NULL à un itérateur ?

NULL est censé désigner une constante de pointeur nul et un itérateur
n'est pas un pointeur.

Quel problème voudrais-tu résoudre ?

-- Gaby

Back to top
Loïc Joly
Guest





PostPosted: Wed Sep 07, 2005 1:58 pm    Post subject: Re: iterator = NULL Reply with quote



Henri de Solages a écrit :
Quote:
Bonjour.

Est-il légal d'assigner la valeur NULL à un itérateur ?

Souvent, l'équivalent moral de NULL pour un itérateur sur une collection
"c" est c.end()

--
Loïc

Back to top
Henri de Solages
Guest





PostPosted: Wed Sep 07, 2005 2:19 pm    Post subject: Re: iterator = NULL Reply with quote

Gabriel Dos Reis a écrit :
Quote:
Henri de Solages <solages (AT) CICT (DOT) fr_> writes:
| Est-il légal d'assigner la valeur NULL à un itérateur ?

NULL est censé désigner une constante de pointeur nul et un itérateur
n'est pas un pointeur.

Quel problème voudrais-tu résoudre ?

Je veux un tableau d'itérateurs sur des éléments d'une list.
Pour parcourir mes tableaux de pointeurs facilement, je les termine par un pointeur NULL.
Y a-t-il un équivalent pour les itérateurs ?
Je remarque cependant que ni c++ ni icpc (compilateur d'Intel) ne me jettent quand
j'affecte NULL à un itérateur.

Back to top
Gabriel Dos Reis
Guest





PostPosted: Wed Sep 07, 2005 2:33 pm    Post subject: Re: iterator = NULL Reply with quote

Henri de Solages <solages (AT) CICT (DOT) fr_> writes:

Quote:
Gabriel Dos Reis a écrit :
Henri de Solages <solages (AT) CICT (DOT) fr_> writes:
| Est-il légal d'assigner la valeur NULL à un itérateur ?
NULL est censé désigner une constante de pointeur nul et un
itérateur
n'est pas un pointeur.
Quel problème voudrais-tu résoudre ?

Je veux un tableau d'itérateurs sur des éléments d'une list.
Pour parcourir mes tableaux de pointeurs facilement, je les termine
par un pointeur NULL. Y a-t-il un équivalent pour les itérateurs ?

Si tu as un tableau, pourquoi voudrais-tu le terminer par par NULL ?
Connaître la taille du tableau ne suffit pas pour savoir quand
s'arrêter ?

typedef list<T>::iterator list_iterator;
vector<list_iterator> v;

Quote:
Je remarque cependant que ni c++ ni icpc (compilateur d'Intel) ne
me jettent quand j'affecte NULL à un itérateur.

Essaie g++ :-)

-- Gaby

Back to top
Gabriel Dos Reis
Guest





PostPosted: Wed Sep 07, 2005 2:36 pm    Post subject: Re: iterator = NULL Reply with quote

Loïc Joly <loic.actarus.joly (AT) wanadoo (DOT) fr> writes:

Quote:
Henri de Solages a écrit :
Bonjour.
Est-il légal d'assigner la valeur NULL à un itérateur ?

Souvent, l'équivalent moral de NULL pour un itérateur sur une
collection "c" est c.end()

Cela peut cependant réserver des surprises.

list<int> l;
// ...
copy(l.begin(), l.end(), back_inserter(l));

-- Gaby

Back to top
Cyrille
Guest





PostPosted: Wed Sep 07, 2005 2:48 pm    Post subject: Re: iterator = NULL Reply with quote

Henri de Solages a écrit :
Quote:
Gabriel Dos Reis a écrit :

Henri de Solages <solages (AT) CICT (DOT) fr_> writes:
| Est-il légal d'assigner la valeur NULL à un itérateur ?

NULL est censé désigner une constante de pointeur nul et un itérateur
n'est pas un pointeur.

Quel problème voudrais-tu résoudre ?


Je veux un tableau d'itérateurs sur des éléments d'une list.
Pour parcourir mes tableaux de pointeurs facilement, je les termine par
un pointeur NULL. Y a-t-il un équivalent pour les itérateurs ?
Je remarque cependant que ni c++ ni icpc (compilateur d'Intel) ne me
jettent quand j'affecte NULL à un itérateur.

En général, on utilise std::vector plutôt que des tableaux, en C++.
Plutôt que marquer le dernier par NULL, on parcours simplement le vector
de begin() à end().

Je ne crois pas que ça ait un sens d'affecter NULL à un itérateur.

--
Ceux qui vivent, ce sont ceux qui luttent.

Back to top
Marc Boyer
Guest





PostPosted: Wed Sep 07, 2005 2:49 pm    Post subject: Re: iterator = NULL Reply with quote

Henri de Solages <solages (AT) CICT (DOT) fr_> a écrit :
Quote:
Gabriel Dos Reis a écrit :
Henri de Solages <solages (AT) CICT (DOT) fr_> writes:
| Est-il légal d'assigner la valeur NULL à un itérateur ?

NULL est censé désigner une constante de pointeur nul et un itérateur
n'est pas un pointeur.

Quel problème voudrais-tu résoudre ?

Je veux un tableau d'itérateurs sur des éléments d'une list.

Pourquoi pas un vecteur ?

Quote:
Pour parcourir mes tableaux de pointeurs facilement,
je les termine par un pointeur NULL.

Sauf que ce ne sont pas forcément des pointeurs.
Que des itérateurs de liste soient des pointeurs,
primo, cela me supprend (et j'aimerais voir comment
ils codent ++), secundo, même si cela est, c'est
une implémentation possible, pas
la seule possible.

Sinon, ce dont tu as besoin, c'est d'un délimiteur de
fin, donc le end() de la liste me semble une bonne
valeur interdite.

Quote:
Y a-t-il un équivalent pour les itérateurs ?
Je remarque cependant que ni c++ ni icpc (compilateur d'Intel) ne me jettent quand
j'affecte NULL à un itérateur.

Amusant: tu as un bout de code.

Marc Boyer
--
À vélo, prendre une rue à contre-sens est moins dangeureux
que prendre un boulevard dans le sens légal. À qui la faute ?

Back to top
Stan
Guest





PostPosted: Wed Sep 07, 2005 2:54 pm    Post subject: Re: iterator = NULL Reply with quote


"Henri de Solages" <solages (AT) CICT (DOT) fr_> a écrit dans le message de
news:dfmsod$9u3$1 (AT) news (DOT) cict.fr...
Quote:
Gabriel Dos Reis a écrit :
Henri de Solages <solages (AT) CICT (DOT) fr_> writes:
| Est-il légal d'assigner la valeur NULL à un itérateur ?

NULL est censé désigner une constante de pointeur nul et un itérateur
n'est pas un pointeur.

Quel problème voudrais-tu résoudre ?

Je veux un tableau d'itérateurs sur des éléments d'une list.
Pour parcourir mes tableaux de pointeurs facilement, je les termine par un
pointeur NULL.
Y a-t-il un équivalent pour les itérateurs ?
Je remarque cependant que ni c++ ni icpc (compilateur d'Intel) ne me
jettent quand
j'affecte NULL à un itérateur.


Pourquoi ne pas placer ces itérateurs dans un vector ?

--

Stan .



Back to top
Marc Boyer
Guest





PostPosted: Wed Sep 07, 2005 3:20 pm    Post subject: Re: iterator = NULL Reply with quote

Gabriel Dos Reis <gdr (AT) integrable-solutions (DOT) net> a écrit :
Quote:
Loïc Joly <loic.actarus.joly (AT) wanadoo (DOT) fr> writes:

| Henri de Solages a écrit :
| > Bonjour.
| > Est-il légal d'assigner la valeur NULL à un itérateur ?
|
| Souvent, l'équivalent moral de NULL pour un itérateur sur une
| collection "c" est c.end()

Cela peut cependant réserver des surprises.

list<int> l;
// ...
copy(l.begin(), l.end(), back_inserter(l));

C'est marrant comme quoi des reflexes du C peuvent
rester incrusté...
Pour moi, end() dans une liste, c'est fondamentalement
le pointeur NULL de toutes les listes chainées C.
Et à chaque fois, faut que je me raisonne en me disant
"mais non, comment faire end()-1 avec NULL ?".
Mais c'est *le* piège (1) ou je tombe systématiquement.

D'ailleurs, un rapide coup d'oeuil sur le code de
la list de mon g++ me dit que end() retourne un "_M_node",
que begin() retourne un "_M_node->_M_next", et la
définition de _M_node semble perdue deux niveaux d'héritage
au dessus... Pas tout clair pour moi.
Ils font une liste circulaire ?

Marc Boyer
(1) enfin, *un* des pièges
--
À vélo, prendre une rue à contre-sens est moins dangeureux
que prendre un boulevard dans le sens légal. À qui la faute ?

Back to top
korchkidu
Guest





PostPosted: Thu Sep 08, 2005 7:21 am    Post subject: Re: iterator = NULL Reply with quote

Gabriel Dos Reis wrote:
Quote:
Loïc Joly <loic.actarus.joly (AT) wanadoo (DOT) fr> writes:

| Henri de Solages a écrit :
| > Bonjour.
| > Est-il légal d'assigner la valeur NULL à un itérateur ?
|
| Souvent, l'équivalent moral de NULL pour un itérateur sur une
| collection "c" est c.end()

Cela peut cependant réserver des surprises.

list<int> l;
// ...
copy(l.begin(), l.end(), back_inserter(l));

JE vois pas le piege la. Tu peux expliquer stp?

K.

Back to top
Henri de Solages
Guest





PostPosted: Thu Sep 08, 2005 8:27 am    Post subject: Re: iterator = NULL Reply with quote

Marc Boyer a écrit :
Quote:
Henri de Solages <solages (AT) CICT (DOT) fr_> a écrit :
Je remarque cependant que ni c++ ni icpc (compilateur d'Intel) ne me jettent quand
j'affecte NULL à un itérateur.


Amusant: tu as un bout de code.

# include <iostream>
# include <string>
# include <list>

using namespace std ;

int main( int argc, char ** argv ) {
list< string >::const_iterator i_nombres = NULL ;

if( i_nombres != NULL )
cerr << "i_nombresn" ;
else
cerr << "non i_nombresn" ;
return 0 ;
}



--
Get rid of the final underscore of my address to use it.

Back to top
kanze
Guest





PostPosted: Thu Sep 08, 2005 8:28 am    Post subject: Re: iterator = NULL Reply with quote

Marc Boyer wrote:
Quote:
Gabriel Dos Reis <gdr (AT) integrable-solutions (DOT) net> a écrit :
Loïc Joly <loic.actarus.joly (AT) wanadoo (DOT) fr> writes:

| Henri de Solages a écrit :

| > Est-il légal d'assigner la valeur NULL à un itérateur ?

| Souvent, l'équivalent moral de NULL pour un itérateur sur
| une collection "c" est c.end()

Cela peut cependant réserver des surprises.

list<int> l;
// ...
copy(l.begin(), l.end(), back_inserter(l));

C'est marrant comme quoi des reflexes du C peuvent
rester incrusté...
Pour moi, end() dans une liste, c'est fondamentalement
le pointeur NULL de toutes les listes chainées C.

Depuis quand est-ce qu'il y a un pointeur NULL dans une liste
chaînée en C. J'ai toujours utilisé des listes doublement
chaînées (qui permettent de supprimer un élément en ne
connaissant que cet élément), avec une vertice « racine ». La
fin de la liste avec la racine comme prochain élément, et le
début comme élément précédant. Dans le cas d'une liste vide, la
racine pointait à lui-même.

Itérer sur tous les éléments devenait :

for ( Node* p = racine->next ; p != &racine, p = p->next ) ...

Supprimer un élément :

elem->next->prev = elem->prev ;
elem->prev->next = elem->next ;

L'utilisation des NULL ne fait que compliquer le code en
introduisant des tests supplémentaires.

Quote:
Et à chaque fois, faut que je me raisonne en me disant
"mais non, comment faire end()-1 avec NULL ?".
Mais c'est *le* piège (1) ou je tombe systématiquement.

D'ailleurs, un rapide coup d'oeuil sur le code de la list de
mon g++ me dit que end() retourne un "_M_node", que begin()
retourne un "_M_node->_M_next", et la définition de _M_node
semble perdue deux niveaux d'héritage au dessus... Pas tout
clair pour moi.
Ils font une liste circulaire ?

Je crois. Je crois qu'il font à peu près comme j'ai fait
ci-dessus. J'ai l'impression que la seule différence entre leur
code et ce que je faisais auparavent (depuis au moins vingt ans
maintenant), c'est qu'ils allouent la racine dynamiquement,
tandis que chez moi, elle était membre. (Le membre, en fait,
c'était un « Node » qui ne contenait que des pointeurs. Les
éléments était des Element qui dérivait de Node, et je me
servais des casts dans la classe de liste pour passer d'un à
l'autre.)

--
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


Back to top
kanze
Guest





PostPosted: Thu Sep 08, 2005 8:32 am    Post subject: Re: iterator = NULL Reply with quote

korchkidu wrote:
Quote:
Gabriel Dos Reis wrote:
Loïc Joly <loic.actarus.joly (AT) wanadoo (DOT) fr> writes:

| Henri de Solages a écrit :

| > Est-il légal d'assigner la valeur NULL à un itérateur ?

| Souvent, l'équivalent moral de NULL pour un itérateur sur une
| collection "c" est c.end()

Cela peut cependant réserver des surprises.

list<int> l;
// ...
copy(l.begin(), l.end(), back_inserter(l));

JE vois pas le piege la. Tu peux expliquer stp?

Essai-le. Et demande-toi ce que bien signifie le résultat d'un
l.end() précédant après une insertion ?

--
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


Back to top
Henri de Solages
Guest





PostPosted: Thu Sep 08, 2005 8:32 am    Post subject: Re: iterator = NULL Reply with quote

Stan a écrit :

Quote:
Pourquoi ne pas placer ces itérateurs dans un vector ?

Je n'aime pas les vector car, quand on fait un erase, les iterateurs sur les élements
suivants ne sont plus valides. J'aime bien qu'on fasse suivre le courrier quand on déménage.

--
Get rid of the final underscore of my address to use it.

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Goto page 1, 2, 3, 4  Next
Page 1 of 4

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.