Warning : comparison between signed and unsigned...

Warning : comparison between signed and unsigned... - C++ - Programmation

Marsh Posté le 09-12-2007 à 13:15:15    

Bonjour, je voudrais savoir si je genre de warning est à prendre en compte:

Citation :

comparison between signed and unsigned integer expressions


 
si on se trouve dans ce genre de cas:

Code :
  1. for (int i=0;i<m_string.size();i++)


 
m_string.size() est de type size_t donc unsigned int
 
Comment ça se passe lors de l'évaluation de l'expression: i<m_string.size() ? i est converti en unsigned int?  
 
Dans ce cas un problème devrait apparaître si m_string.size() est plus grand que le max d'un int (2^31-1 chez moi). Mais je me vois mal me balader avec une chaine de longueur > 2^31-1 [:pingouino]
 
Je ne commets pas un crime en laissant int i au lieu de mettre unsigned int?
 

Reply

Marsh Posté le 09-12-2007 à 13:15:15   

Reply

Marsh Posté le 09-12-2007 à 14:30:56    

bha mets un unsigned int...

Reply

Marsh Posté le 09-12-2007 à 14:43:27    

[:ddr555]  Oui mais je trouve ça moche! Mais bon je préfère quand même un truc fiable.

Reply

Marsh Posté le 09-12-2007 à 14:52:24    

bha non, ca me semble logique que la taille d'une chaine de caractère est non signée.
 
mais le problème ne doit pas se poser puisque pour parcourir une chaine, il faut utiliser les itérateurs ...

Reply

Marsh Posté le 09-12-2007 à 15:01:51    

KangOl a écrit :

bha non, ca me semble logique que la taille d'une chaine de caractère est non signée.
 
mais le problème ne doit pas se poser puisque pour parcourir une chaine, il faut utiliser les itérateurs ...


En fait c'est un vecteur de string (c'est de ma faute j'ai mis m_string.. dans mon ex). Mais je suppose que c'est exactement la même chose et qu'il faut utiliser un itérateur également.
 
Pourquoi il vaut mieux utiliser un itérateur plutôt que d'accéder aux éléments du vecteur comme un tableau: vecteur[i] ?
 
Je trouve ça plus lourd de créer un itérateur à 1ère vue. Mais il doit y avoir une ou des raisons.

Message cité 1 fois
Message édité par ngkreator le 09-12-2007 à 15:03:19
Reply

Marsh Posté le 09-12-2007 à 15:26:40    

ngkreator a écrit :


 
Pourquoi il vaut mieux utiliser un itérateur plutôt que d'accéder aux éléments du vecteur comme un tableau: vecteur[i] ?


oui

Reply

Marsh Posté le 09-12-2007 à 15:34:40    


C'est fait exprès ou t'as pas vu le "Pourquoi" au début?

Reply

Marsh Posté le 09-12-2007 à 20:19:11    

Parce que c'est une habitude de parcourir les conteneurs avec des itérateurs. [:spamafote] Parfois même, c'est obligatoire, quand il y a des éléments supprimés dans le conteneur, comme dans une liste chaînée. On peut voir les itérateurs comme des sortes de pointeurs "intelligents".

Message cité 1 fois
Message édité par el muchacho le 09-12-2007 à 20:33:30

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Marsh Posté le 09-12-2007 à 22:34:52    

el muchacho a écrit :

Parce que c'est une habitude de parcourir les conteneurs avec des itérateurs. [:spamafote] Parfois même, c'est obligatoire, quand il y a des éléments supprimés dans le conteneur, comme dans une liste chaînée. On peut voir les itérateurs comme des sortes de pointeurs "intelligents".

Donc personne ne sais pourquoi?  
 
Quand tu parles d'éléments supprimés dans le conteneur je vois pas quel problèmes ça peut poser. Quand on supprimer un élément à la 5ème place dans un vecteur il n'y a pas de "trou" le 6ème prend la place.

Reply

Marsh Posté le 10-12-2007 à 09:23:09    

les itérateurs sont une abstraction d'accès à un conteneur, ce qui permet de changer de conteneur sans changer le code qui touche la collection.
 
c'est pas obligé d'utiliser un vector<> ou un string<> via un iterateur par exemple, mais si c'est une portion de code ou les collections peuvent évoluer ça peut être un avantage d'accéder à la collection par un iterateur (moins de code à changer, etc...).
 
maintenant c'est toi qui chouaze.


Message édité par bjone le 10-12-2007 à 09:23:59
Reply

Marsh Posté le 10-12-2007 à 09:23:09   

Reply

Marsh Posté le 10-12-2007 à 09:38:07    

un bon vieux size_t c'est mieux, voire un std::string::size_type

Reply

Marsh Posté le 10-12-2007 à 15:14:57    

Merci à vous 2  :jap:

Reply

Marsh Posté le 20-04-2010 à 21:33:46    

Merci pour l'info, ça m'a aussi été très utile ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed