SPLIT EN C++ AVEC LES CONTENEURS STANDARD

CChargy Messages postés 126 Date d'inscription samedi 24 avril 2004 Statut Membre Dernière intervention 6 janvier 2008 - 20 juil. 2007 à 23:44
CChargy Messages postés 126 Date d'inscription samedi 24 avril 2004 Statut Membre Dernière intervention 6 janvier 2008 - 12 mai 2008 à 15:31
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/43529-split-en-c-avec-les-conteneurs-standard

CChargy Messages postés 126 Date d'inscription samedi 24 avril 2004 Statut Membre Dernière intervention 6 janvier 2008
12 mai 2008 à 15:31
Je me suis trompe et personne ne s'en ai rendu compte :)
Pour vider le tableau dynamique, je met : vecteur[0].empty();
Ce qui est faux : empty renvoie un bool si les ocnteneur standard est vide.
Je voulais mettre vecteur[0].clear();
clear vide bien le tableau ... :)

Bonne prog
Colin CHARGY
shenron666 Messages postés 229 Date d'inscription dimanche 14 septembre 2003 Statut Membre Dernière intervention 20 août 2014
22 juil. 2007 à 18:13
C'est sûr que si c'est pour parser un fichier au chargement ce n'est pas très critique niveau temps d'execution
par contre si ton "monde" commence à devenir vraiment grand avec un fichier de quelques Mo ça risque de faire un peu long ^__^
passer quelques minutes à optimiser ce genre de code t'apportera quelques connaissances niveau utilisation de la stl qui est très pratique

au cas où cela t'intéresses, il y a un très bon cours de C++ en français téléchargeable ici :
http://casteyde.christian.free.fr/cpp/cours/cours_cpp-1.40.6-html.zip
dont la partie II traites de la stl

ps: c'est un très bon livre que tu as entre les mains
CChargy Messages postés 126 Date d'inscription samedi 24 avril 2004 Statut Membre Dernière intervention 6 janvier 2008
22 juil. 2007 à 11:07
Salut,
Tout ce que tu dis est vrai ...
Ce code sert pour charger la contenu du monde dan un jeu durant le phase de chargement donc je suis pas à quelques millisecondes près...
Ceci dit, je suis inexcusable quand même puisque j'ai sous la main "Le language C++" de Bjarne Stroustrup dans lequel tout ceci est expliquer et en plus je l'ai lu...
Je n'ai pas l'habitude d'utiliser ni push, ni les itérateurs, ni find ...
Par contre, il est vrai que j'utilise des resize à tut bout de champs...

J'ai commencer par écrire cette fonction avec find, mais sans résultats, c'est pour cela que j'ai décider de faire caractère par caractère.

Quand j'aurais du temp, je la réécrirais en suivant tes conseils ...

Merci ^^
Colin CHARGY
shenron666 Messages postés 229 Date d'inscription dimanche 14 septembre 2003 Statut Membre Dernière intervention 20 août 2014
21 juil. 2007 à 23:51
salut,
intéressante source mais je t'invite à quelques corrections :
- évites de passer un pointeur vers vctor en paramètre mais plutot une référence, cela t'évitera de faire un test que tu ne fais pas : vérifier que le pointeur passé en paramètre n'est pas nul
- c'est absurde d'utiliser des resize à tout bout de champs, tu ne connais pas la méthode push ? resize n'est à utiliser que si tu connais la taille de vector que tu veux
- normalement on parcours une string, un vector, ect... ce qu'on appelle les conteneurs de la stl avec des itérateurs
- pour trouver un caractère dans une string, la classe possède une méthode nommé find

voilà de quoi optimiser ton code ;-)
CChargy Messages postés 126 Date d'inscription samedi 24 avril 2004 Statut Membre Dernière intervention 6 janvier 2008
20 juil. 2007 à 23:44
Voili voilou...

On pourrait replacer tous les "->at(qqch)" par "[qqch]" pour accélérer le code mais enlever le contrôle des index ...

Il serait aussi intéressant de stocker "vecteur->size() - 1" dans une variable pour y accéder plus vite ...

Voilà

Colin CHARGY
Rejoignez-nous