des ptites questions sur la STL et sur string - C++ - Programmation
Marsh Posté le 13-12-2002 à 19:51:31
iostream fait partie du standard pas iostream.h
En particulier le comportement pour ce dernier
dependra de ton compilateur.
Sous visual C++ 6 si tu melanges
iostream.h avec string
alors tu ne peux pas ecrire
cout << string("toto" );
Conclusion:
si tu veux utiliser le standard C++ le plus recent, tu compiles avec iostream.
iostream.h n'a du sens que si tu as des sources qui datent et qui n'ont pas encore inclu le changement.
(parce qu'il y a eu plusieurs versions de la STL)
Maintenant a quoi servent les namespaces?
je pense que bien utilises ils peuvent aider le programmeur.
Tu peux choisir tous les noms que tu veux pour tes classes ou pour tes fonctions, il y a moins de risques que ce nom existe deja (meme si le risque n'est pas exclu mais par exemple ca risque de poser moins de problemes a l'edition des liens lorsque deux fonctions ont le meme prototype).
tu as un namespace ig dans lequel sont redefinies quelques fonctions standards comme le malloc,
tu peux toujours l'appeler malloc parce que ig::malloc
ne collisionnera pas avec std::malloc
(c'est un exemple).
A+
LeGreg
Marsh Posté le 13-12-2002 à 20:01:34
Citation : 2eme question maintenant: |
c'est l'un des problemes que je rencontre parfois dans mon code.
Les litterals (inclus dans le segment data) n'existent que pour les tableaux de char. Ce qui fait qu'a chaque occurrence de la constante sous forme de string, il y a un surcout lie a la construction (a moins de le declarer static mais le surcout existe tout de meme a la creation de l'application ou lors du premier appel).
Ce serait bien d'avoir un stringwrapper, qui soit constructible dans le segment data et donc d'eviter d'avoir a dupliquer tout ca.. Pour ca les char * ont l'avantage. En pratique ce probleme est tres leger. Il faut juste faire attention a ne pas trop construire de constantes chaines sur la pile .
Pour ce qui est de ta question : Il y a un constructeur par defaut qui accepte un const char*
tu fais
Code :
|
tu peux aussi affecter un contenu apres coup:
Code :
|
pour lire depuis l'entree standard (avec iostream et pas iostream.h!!)
Code :
|
A+
LeGreg
Marsh Posté le 13-12-2002 à 20:03:29
ok emrci pour le coup de lire directeent dans un string plutot que dans un char * !
Marsh Posté le 13-12-2002 à 21:26:25
bon je peux pas tester par manque de compilateur chez moi, mais est-ce que ceci pourrait marcher :
Code :
|
Marsh Posté le 13-12-2002 à 23:08:01
Code :
|
plutot.
Pas besoin de passer par un buffer intermediaire.
LeGreg
Marsh Posté le 13-12-2002 à 23:09:12
et encore une fois
<iostream> et non pas <iostream.h>
LeGreg
Marsh Posté le 13-12-2002 à 23:12:50
legreg a écrit : et encore une fois |
pareil pour <fstream.h>
Marsh Posté le 14-12-2002 à 02:22:21
euh oui mais je tiens a utiliser les iostream.h et fstream.h, le code etant fait pour l'IUT on a certaines obligations
voila donc je voudrais savoir si le code donné plus haut marcherait sans modification par vous
sinon oui pour moi je me servirais de iostream et fstream
Marsh Posté le 14-12-2002 à 07:36:34
Jam Kuradoberi a écrit : euh oui mais je tiens a utiliser les iostream.h et fstream.h, le code etant fait pour l'IUT on a certaines obligations |
ben normalement les versions sans .h et avec std:: doivent marcher quand meme, amoins que ton compilo ait 10ans
Marsh Posté le 13-12-2002 à 19:08:07
hop deja premeire question ej comprends pas a koi sert <iostream> et "using namespace std;"
jai fait un ptit programme du type :
et ca marche tres bien
si vous pouviez me dire ce k'apporte exactement <iostream> par rapport a <iostream.h>, et a koi sert "using namespace std;" ?
2eme question maintenant:
y'a t'il moyen de construitre un objet string a partir d'un tableau de char (en fait je lis d'un fichier et j'aimerais mettre les lignes dans des string), ou alors y'a t'il moyen de lire les ligens d'un fichier directemetn dans une string ?
merci