oui, par contre tu devrai faire des template. c moi chiant
"Joseph KHOURY" a écrit dans le message news: 40b0aa12$0$13934$
Bonjour,
J'ai definit la classe
class perso { public: string fname; string lname; ... };
je declare:
list<perso> toto; list<perso> :: iterator it;
Est-ce que les méthodes de la classe list de la STL comme insert, merge et
autres s'utilisent comme dans le cas de la declaration: list<int>nombre;
Merci de votre aide.
Patrick Mézard
Joseph KHOURY wrote:
Bonjour,
J'ai definit la classe
class perso { public: string fname; string lname; ... };
je declare:
list<perso> toto; list<perso> :: iterator it;
Est-ce que les méthodes de la classe list de la STL comme insert, merge et autres s'utilisent comme dans le cas de la declaration: list<int>nombre;
Oui, c'est le principe des conteneurs de la STL.
Les différents conteneurs supposent que le types passés en paramètres ont certaines propriétés, comme d'être copiables par assignation et construction par exemple. A partir du moment où les types utilisés implémentent ces opérations avec la même sémantique, ils sont substituables, et le conteneur peut implémenter ses opérations de la même manières pour tout ces types. Il exploite du polymorphisme de compilation.
Les types passés en arguments influent tout de même sur plusieurs choses : - "L'efficacité" des opérations, au sens très large (la complexité des opérations reste la même d'un type à l'autre). En gros, les conteneurs manipulent les instances contenues par valeur. Plus les objets sont lourds à copier plus leur manipulation sera coûteuse. C'est pour cela que les "grosses" instances se manipulent généralement via leurs pointeurs, mais cela entraine d'autres problèmes.
- Les garanties aux exceptions. Les conteneurs de la STL garantissent certaines propriétés en cas de levée d'exception durant une opération. Par exemple, si un std::vector<>::push_back jette une exception, alors l'objet n'a pas été inséré quel que soit son type. Pour certaines opérations, ces garanties dépendent aussi du comportement des types utilisés. Si le type peut lancer des exceptions durant une copie alors std::vector<>::insert laissera le conteneur dans un état valide mais non spécifié (l'objet pourra avoir été inséré ou pas).
Patrick Mézard
Joseph KHOURY wrote:
Bonjour,
J'ai definit la classe
class perso
{ public:
string fname;
string lname;
...
};
je declare:
list<perso> toto;
list<perso> :: iterator it;
Est-ce que les méthodes de la classe list de la STL comme insert, merge et
autres s'utilisent comme dans le cas de la declaration:
list<int>nombre;
Oui, c'est le principe des conteneurs de la STL.
Les différents conteneurs supposent que le types passés en paramètres
ont certaines propriétés, comme d'être copiables par assignation et
construction par exemple. A partir du moment où les types utilisés
implémentent ces opérations avec la même sémantique, ils sont
substituables, et le conteneur peut implémenter ses opérations de la
même manières pour tout ces types. Il exploite du polymorphisme de
compilation.
Les types passés en arguments influent tout de même sur plusieurs choses :
- "L'efficacité" des opérations, au sens très large (la complexité des
opérations reste la même d'un type à l'autre). En gros, les conteneurs
manipulent les instances contenues par valeur. Plus les objets sont
lourds à copier plus leur manipulation sera coûteuse. C'est pour cela
que les "grosses" instances se manipulent généralement via leurs
pointeurs, mais cela entraine d'autres problèmes.
- Les garanties aux exceptions. Les conteneurs de la STL garantissent
certaines propriétés en cas de levée d'exception durant une opération.
Par exemple, si un std::vector<>::push_back jette une exception, alors
l'objet n'a pas été inséré quel que soit son type. Pour certaines
opérations, ces garanties dépendent aussi du comportement des types
utilisés. Si le type peut lancer des exceptions durant une copie alors
std::vector<>::insert laissera le conteneur dans un état valide mais non
spécifié (l'objet pourra avoir été inséré ou pas).
class perso { public: string fname; string lname; ... };
je declare:
list<perso> toto; list<perso> :: iterator it;
Est-ce que les méthodes de la classe list de la STL comme insert, merge et autres s'utilisent comme dans le cas de la declaration: list<int>nombre;
Oui, c'est le principe des conteneurs de la STL.
Les différents conteneurs supposent que le types passés en paramètres ont certaines propriétés, comme d'être copiables par assignation et construction par exemple. A partir du moment où les types utilisés implémentent ces opérations avec la même sémantique, ils sont substituables, et le conteneur peut implémenter ses opérations de la même manières pour tout ces types. Il exploite du polymorphisme de compilation.
Les types passés en arguments influent tout de même sur plusieurs choses : - "L'efficacité" des opérations, au sens très large (la complexité des opérations reste la même d'un type à l'autre). En gros, les conteneurs manipulent les instances contenues par valeur. Plus les objets sont lourds à copier plus leur manipulation sera coûteuse. C'est pour cela que les "grosses" instances se manipulent généralement via leurs pointeurs, mais cela entraine d'autres problèmes.
- Les garanties aux exceptions. Les conteneurs de la STL garantissent certaines propriétés en cas de levée d'exception durant une opération. Par exemple, si un std::vector<>::push_back jette une exception, alors l'objet n'a pas été inséré quel que soit son type. Pour certaines opérations, ces garanties dépendent aussi du comportement des types utilisés. Si le type peut lancer des exceptions durant une copie alors std::vector<>::insert laissera le conteneur dans un état valide mais non spécifié (l'objet pourra avoir été inséré ou pas).
Patrick Mézard
Samuel Krempp
le Sunday 23 May 2004 20:41, écrivit :
oui, par contre tu devrai faire des template. c moi chiant
? des templates de quoi, pour quoi ?
(et note que l'on répond *après* le message cité, et qu'on cite le moins possible du message) -- Sam
le Sunday 23 May 2004 20:41, syn-ack@wanadoo.fr écrivit :
oui, par contre tu devrai faire des template. c moi chiant
?
des templates de quoi, pour quoi ?
(et note que l'on répond *après* le message cité, et qu'on cite le moins
possible du message)
--
Sam