Warning : comparison between signed and unsigned... - C++ - Programmation
Marsh Posté le 09-12-2007 à 14:43:27
Oui mais je trouve ça moche! Mais bon je préfère quand même un truc fiable.
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 ...
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. |
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.
Marsh Posté le 09-12-2007 à 15:26:40
ngkreator a écrit : |
oui
Marsh Posté le 09-12-2007 à 15:34:40
ReplyMarsh Posté le 09-12-2007 à 20:19:11
Parce que c'est une habitude de parcourir les conteneurs avec des itérateurs. 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".
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. 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.
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.
Marsh Posté le 10-12-2007 à 09:38:07
un bon vieux size_t c'est mieux, voire un std::string::size_type
Marsh Posté le 09-12-2007 à 13:15:15
Bonjour, je voudrais savoir si je genre de warning est à prendre en compte:
comparison between signed and unsigned integer expressions
si on se trouve dans ce genre de cas:
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
Je ne commets pas un crime en laissant int i au lieu de mettre unsigned int?