[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [linux] [off topic]: question c++
Salut.
Le Mon, 4 Jun 2001 21:08:27 +0200, Benjamin Michotte <binny@baby-linux.net> a écrit :
> hello,
>
> une petite question de réflexion...
> la réponse doit être toute conne quand on connait le c++ mais vu que
> c'est un dossier pour l'exam de demain, ...
>
Désolé si j'arrive trop tard. :-(
> class Centre
> {
> friend ostream& operator<<(ostream&,const Centre&);
> friend istream& operator>>(istream&,Centre&);
> private:
> std::vector<PersAdmin> vecCAdmin;
> std::vector<PersForma> vecCForma;
> std::vector<PersClient> vecCClient;
> std::vector<Formation> vecCFormation;
> std::string nom;
> std::string adresse;
> public:
> ...
> }
[cut]
>
> bon, donc, quand je veux sauver des personnes (oui, y'a ca),
> ben j'ai les << et >> qui sont surchargés et ça va fort bien...
> par contre, j'arrive pas a trouver comment je dois faire pour sauver
> Centre (les << >> acceptent pas les vector)...
Il suffit de leur dire :-)
Dans ta fonction amie operator<<, tu fais une copie de chaque élément de ton vector dans le flux sortant.
Pour cela, deux méthodes :
- soit tu copies dans une boucle chaque élément dans le flux sortant genre :
"
vector<machin>::cons_iterator iter = vec.begin ();
for (; iter != vec.end (); ++iter) {
flux << *iter << ", ";
}
"
Attention: je te l'écris tel que je le pense mais cela ne doit pas boguer normalement.
- soit mieux, tu utilise la fonction copy des algorithmes de la STL genre :
"copy (vec.begin (), vec.end (), ostream::iterator ...) "
mais là je ne me souviens plus de la syntaxe et du nom de l'iterator pour le flux sortant.
Regardes dans la doc sur les iterateurs de flux sortants pour la suite.
En tous cas, la première marche et t'évite de gérer un nombre quelconque de début et de fin.
La deuxième aussi mais je ne me rappelle plus comment :
Pour le flux standard (cout), j'ai trouvé ceci dans le Borland C++ :
"copy (vec.begin (), vec.end (), ostream_iterator <int> (cout, " "));"
le "<int>" signifie que les éléments de sortie sont des entiers pour le 'cout', et le " " signifie que la séparation de 2 éléments se fait par un <espace>.
Pour les autres flux, cela doit marcher de la même manière.
A tester ...
> Y'aurait bien la version foutre un flag pour dire combien y'a de PersAdmin,
> PersClient... mais c'est vachement goret...
T'as raison, c'est pas bö (;-) et les itérateurs sont justement là pour éviter cela !
Le 'copy' peut etre utilisé pour copier d'une structure à une autre de meme type mais aussi d'une structure à un autre type de structure pourvu que l'itérateur soit défini, et donc dans un flux de sortie quelconque, qu'il soit 'cout' ou fichier.
>
> Une idée ??
cf plus haut.
>
> @+,
> binny
>
> ps: svp, l'exam est demain ;)) (oui, je sais, je suis à la bourre et j'ai
> un uptime de 2 days, 11h08... donc faut m'excuser si je suis pas clair ou
> que je trouve pas un truc qui doit être somme toute ridicule...
>
Désolé pour le retard, encore :-(
Bon courage.
--
Eugene Sandford
Ps: Si tu désires continuer dans le C++, je ne saurais que te conseiller le C++ de Stroustroup, référence en la matière, qui te décrit de long en large les itérateurs et leur utilisation.
[ Soyez précis dans vos sujets svp afin de déterminer directement ]
[ le type de demande... ]
[ Pour vous (dés)inscrire, aller sur http://linuxbe.org/ml.php ]
[ http://LinuxBe.org Contact: listmaster@linuxbe.org ]