Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Christophe Lephay
"Zoubidaman" a écrit dans le message de news:
je me posais la question suivante :
Vaut-il mieux, quand on a le choix de faire les deux, utiliser les composants de la STL ou bien se créer une classe?
La SL a été conçue bien entendu pour être utilisée. Voici quelques raisons en vrac pour utiliser ses fonctionnalités :
* Développées par des spécialistes, on est en droit d'en attendre de bonnes performances * Elles sont déjà déboguées * Elles sont standardes, donc probablement déjà connues de quiconque aurait à lire ton code * Elles sont unifiées, conçus pour fonctionner pleinement entre elles (par exemple tu peux utiliser les std::algorithmes sur les std::conteneurs)
Il me semble que c'est une drôle de question que tu te poses, là :)
Chris
"Zoubidaman" <zoubidaman@hotmail.com> a écrit dans le message de
news:9bf3cacd.0307221558.7e064e48@posting.google.com...
je me posais la question suivante :
Vaut-il mieux, quand on a le choix de faire les deux, utiliser les
composants de la STL ou bien se créer une classe?
La SL a été conçue bien entendu pour être utilisée. Voici quelques raisons
en vrac pour utiliser ses fonctionnalités :
* Développées par des spécialistes, on est en droit d'en attendre de bonnes
performances
* Elles sont déjà déboguées
* Elles sont standardes, donc probablement déjà connues de quiconque aurait
à lire ton code
* Elles sont unifiées, conçus pour fonctionner pleinement entre elles (par
exemple tu peux utiliser les std::algorithmes sur les std::conteneurs)
Il me semble que c'est une drôle de question que tu te poses, là :)
Vaut-il mieux, quand on a le choix de faire les deux, utiliser les composants de la STL ou bien se créer une classe?
La SL a été conçue bien entendu pour être utilisée. Voici quelques raisons en vrac pour utiliser ses fonctionnalités :
* Développées par des spécialistes, on est en droit d'en attendre de bonnes performances * Elles sont déjà déboguées * Elles sont standardes, donc probablement déjà connues de quiconque aurait à lire ton code * Elles sont unifiées, conçus pour fonctionner pleinement entre elles (par exemple tu peux utiliser les std::algorithmes sur les std::conteneurs)
Il me semble que c'est une drôle de question que tu te poses, là :)
Chris
Fabien LE LEZ
On 22 Jul 2003 19:05:21 -0700, (Zoubidaman) wrote:
Vaut-il mieux, quand on a le choix de faire les deux, utiliser les composants de la STL ou bien se créer une classe?
Prenons par exemple un train de voyageurs. J'ai une classe Voyageur, et je décide de représenter, en première approximation, un wagon sous la forme d'un std::set<Voyageur>, et le train sous la forme d'un std::vector<Wagon>. La question qui se pose est : un "Wagon" est-il un std::set<Voyageur>, ou une classe contenant un std::set<Voyageur> ? La réponse est... ça dépend du contexte ;-)
Ce qui devrait permettre de modifier a posteriori le type de Wagon pour en faire une classe (par exemple pour rajouter d'autres informations, ou pour rajouter une fonction de calcul du prix total des places), sans casser le code utilisant les types "Wagon" et "Train".
Par contre, si ta question est "Faut-il utiliser la STL ou se taper l'allocation dynamique de mémoire à la main ?", j'imagine que la réponse est évidente... ;-)
-- Tout sur fr.* (FAQ, etc.) : http://www.usenet-fr.net/fur/ et http://www.aminautes.org/forums/serveurs/tablefr.html Archives : http://groups.google.com/advanced_group_search http://www.usenet-fr.net/fur/usenet/repondre-sur-usenet.html
On 22 Jul 2003 19:05:21 -0700, zoubidaman@hotmail.com (Zoubidaman)
wrote:
Vaut-il mieux, quand on a le choix de faire les deux, utiliser les
composants de la STL ou bien se créer une classe?
Prenons par exemple un train de voyageurs. J'ai une classe Voyageur,
et je décide de représenter, en première approximation, un wagon sous
la forme d'un std::set<Voyageur>, et le train sous la forme d'un
std::vector<Wagon>.
La question qui se pose est : un "Wagon" est-il un std::set<Voyageur>,
ou une classe contenant un std::set<Voyageur> ?
La réponse est... ça dépend du contexte ;-)
Ce qui devrait permettre de modifier a posteriori le type de Wagon
pour en faire une classe (par exemple pour rajouter d'autres
informations, ou pour rajouter une fonction de calcul du prix total
des places), sans casser le code utilisant les types "Wagon" et
"Train".
Par contre, si ta question est "Faut-il utiliser la STL ou se taper
l'allocation dynamique de mémoire à la main ?", j'imagine que la
réponse est évidente... ;-)
--
Tout sur fr.* (FAQ, etc.) : http://www.usenet-fr.net/fur/
et http://www.aminautes.org/forums/serveurs/tablefr.html
Archives : http://groups.google.com/advanced_group_search
http://www.usenet-fr.net/fur/usenet/repondre-sur-usenet.html
On 22 Jul 2003 19:05:21 -0700, (Zoubidaman) wrote:
Vaut-il mieux, quand on a le choix de faire les deux, utiliser les composants de la STL ou bien se créer une classe?
Prenons par exemple un train de voyageurs. J'ai une classe Voyageur, et je décide de représenter, en première approximation, un wagon sous la forme d'un std::set<Voyageur>, et le train sous la forme d'un std::vector<Wagon>. La question qui se pose est : un "Wagon" est-il un std::set<Voyageur>, ou une classe contenant un std::set<Voyageur> ? La réponse est... ça dépend du contexte ;-)
Ce qui devrait permettre de modifier a posteriori le type de Wagon pour en faire une classe (par exemple pour rajouter d'autres informations, ou pour rajouter une fonction de calcul du prix total des places), sans casser le code utilisant les types "Wagon" et "Train".
Par contre, si ta question est "Faut-il utiliser la STL ou se taper l'allocation dynamique de mémoire à la main ?", j'imagine que la réponse est évidente... ;-)
-- Tout sur fr.* (FAQ, etc.) : http://www.usenet-fr.net/fur/ et http://www.aminautes.org/forums/serveurs/tablefr.html Archives : http://groups.google.com/advanced_group_search http://www.usenet-fr.net/fur/usenet/repondre-sur-usenet.html
Fabien SK
Christophe Brun wrote:
"Zoubidaman" a écrit dans le message de news:
Vaut-il mieux, quand on a le choix de faire les deux, utiliser les composants de la STL ou bien se créer une classe?
Mais dans le cas que tu cites (vaut-il mieux une pair< int, int > ou une classe avec deux membres int), la réponse doit être plus circonstanciée. La classe pair< T, U > implémente les opérateurs de comparaison et d'affectation. Si tu es certain de ne jamais avoir besoin que de ces méthodes pour les objets portés par ton vector, il me semble plus simple d'utiliser la pair de la STL.
Il faut voir aussi la lisibilité. Une personne qui relit le code pourra se demander ce qu'étaient le "first" et le "second" de la paire. Vaut mieux faire un:
struct toto { int age; float amount; };
Qui a des noms de membres quand même plus parlants.
Christophe Brun wrote:
"Zoubidaman" <zoubidaman@hotmail.com> a écrit dans le message de
news:9bf3cacd.0307221558.7e064e48@posting.google.com...
Vaut-il mieux, quand on a le choix de faire les deux, utiliser les
composants de la STL ou bien se créer une classe?
Mais dans le cas que tu cites (vaut-il mieux une pair< int, int > ou une
classe avec deux membres int), la réponse doit être plus circonstanciée. La
classe pair< T, U > implémente les opérateurs de comparaison et
d'affectation. Si tu es certain de ne jamais avoir besoin que de ces
méthodes pour les objets portés par ton vector, il me semble plus simple
d'utiliser la pair de la STL.
Il faut voir aussi la lisibilité. Une personne qui relit le code pourra
se demander ce qu'étaient le "first" et le "second" de la paire. Vaut
mieux faire un:
struct toto
{
int age;
float amount;
};
Qui a des noms de membres quand même plus parlants.
Vaut-il mieux, quand on a le choix de faire les deux, utiliser les composants de la STL ou bien se créer une classe?
Mais dans le cas que tu cites (vaut-il mieux une pair< int, int > ou une classe avec deux membres int), la réponse doit être plus circonstanciée. La classe pair< T, U > implémente les opérateurs de comparaison et d'affectation. Si tu es certain de ne jamais avoir besoin que de ces méthodes pour les objets portés par ton vector, il me semble plus simple d'utiliser la pair de la STL.
Il faut voir aussi la lisibilité. Une personne qui relit le code pourra se demander ce qu'étaient le "first" et le "second" de la paire. Vaut mieux faire un:
struct toto { int age; float amount; };
Qui a des noms de membres quand même plus parlants.
kanze
(Zoubidaman) wrote in message news:...
je me posais la question suivante :
Vaut-il mieux, quand on a le choix de faire les deux, utiliser les composants de la STL ou bien se créer une classe?
L'un n'exclut pas l'autre.
Ex: pour stocker une liste de 2 nombres, on peut faire un vecteur de paires
vector<pair<int,int> > test;
Mais on peut aussi créer une classe et faire un vecteur de cette classe:
class toto { int i,j; } toto foo;
vector<foo> test;
Enfin, voilà c'est un exemple, mais ce à quoi je pense serait plutôt des listes et des maps...
Donc ce que je voudrais savoir, c'est si plus rapide d'utiliser la STL ou les classes... voilà tout
Tout dépend de ce que tu fais. En gros, si quelque chose fait partie de l'abstraction de ton application, tu dois en définir une classe, avec l'interface exacte qui convient. STL n'est pas fait pour ça -- elle ne pourrait pas l'être, puisque l'interface exacte va dépendre de ton application, et de ta façon de l'implémenter. En revanche, rien n'empeche à utiliser la STL dans l'implémentation de ta classe.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
zoubidaman@hotmail.com (Zoubidaman) wrote in message
news:<9bf3cacd.0307221558.7e064e48@posting.google.com>...
je me posais la question suivante :
Vaut-il mieux, quand on a le choix de faire les deux, utiliser les
composants de la STL ou bien se créer une classe?
L'un n'exclut pas l'autre.
Ex: pour stocker une liste de 2 nombres, on peut faire un vecteur de
paires
vector<pair<int,int> > test;
Mais on peut aussi créer une classe et faire un vecteur de cette
classe:
class toto
{
int i,j;
}
toto foo;
vector<foo> test;
Enfin, voilà c'est un exemple, mais ce à quoi je pense serait plutôt
des listes et des maps...
Donc ce que je voudrais savoir, c'est si plus rapide d'utiliser la STL
ou les classes... voilà tout
Tout dépend de ce que tu fais. En gros, si quelque chose fait partie de
l'abstraction de ton application, tu dois en définir une classe, avec
l'interface exacte qui convient. STL n'est pas fait pour ça -- elle ne
pourrait pas l'être, puisque l'interface exacte va dépendre de ton
application, et de ta façon de l'implémenter. En revanche, rien
n'empeche à utiliser la STL dans l'implémentation de ta classe.
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Vaut-il mieux, quand on a le choix de faire les deux, utiliser les composants de la STL ou bien se créer une classe?
L'un n'exclut pas l'autre.
Ex: pour stocker une liste de 2 nombres, on peut faire un vecteur de paires
vector<pair<int,int> > test;
Mais on peut aussi créer une classe et faire un vecteur de cette classe:
class toto { int i,j; } toto foo;
vector<foo> test;
Enfin, voilà c'est un exemple, mais ce à quoi je pense serait plutôt des listes et des maps...
Donc ce que je voudrais savoir, c'est si plus rapide d'utiliser la STL ou les classes... voilà tout
Tout dépend de ce que tu fais. En gros, si quelque chose fait partie de l'abstraction de ton application, tu dois en définir une classe, avec l'interface exacte qui convient. STL n'est pas fait pour ça -- elle ne pourrait pas l'être, puisque l'interface exacte va dépendre de ton application, et de ta façon de l'implémenter. En revanche, rien n'empeche à utiliser la STL dans l'implémentation de ta classe.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
zoubidaman
Eh bien merci pour vos éclaircissements...
Etant donné que dans le cas qui se présente à moi je n'utilise que les fonctions associées à la STL (comparaison, sort...), je vais en rester à la STL.
Quant à first et second, je me dis que si moi, débutant en C++, je sais à quoi ça correspond, quelqu'un de plus habitué saura de quoi ça parle...
Merci encore...
Eh bien merci pour vos éclaircissements...
Etant donné que dans le cas qui se présente à moi je n'utilise que les
fonctions associées à la STL (comparaison, sort...), je vais en rester
à la STL.
Quant à first et second, je me dis que si moi, débutant en C++, je
sais à quoi ça correspond, quelqu'un de plus habitué saura de quoi ça
parle...
Etant donné que dans le cas qui se présente à moi je n'utilise que les fonctions associées à la STL (comparaison, sort...), je vais en rester à la STL.
Quant à first et second, je me dis que si moi, débutant en C++, je sais à quoi ça correspond, quelqu'un de plus habitué saura de quoi ça parle...
Merci encore...
Vincent Lascaux
Quant à first et second, je me dis que si moi, débutant en C++, je sais à quoi ça correspond, quelqu'un de plus habitué saura de quoi ça parle...
Le problème c'est pas de savoir si first correspond bien au premier membre de la paire ou au second. Ca, effectivement, quelqu'un de moins habitué que toi le saura aussi (s'il a fait un peu d'anglais de base). Le problème c'est de savoir ce que représente le premier membre. A moins de documenter chaque ligne pour le préciser, c'est très simple de perdre le lecteur de ton code. Si tu utilises plusieurs paires dans ton code, tu auras des first qui ne stoquent pas la même information. Et puis first c'est pas très explicite comme nom de variable...
-- Vincent
Quant à first et second, je me dis que si moi, débutant en C++, je
sais à quoi ça correspond, quelqu'un de plus habitué saura de quoi ça
parle...
Le problème c'est pas de savoir si first correspond bien au premier membre
de la paire ou au second. Ca, effectivement, quelqu'un de moins habitué que
toi le saura aussi (s'il a fait un peu d'anglais de base).
Le problème c'est de savoir ce que représente le premier membre. A moins de
documenter chaque ligne pour le préciser, c'est très simple de perdre le
lecteur de ton code. Si tu utilises plusieurs paires dans ton code, tu auras
des first qui ne stoquent pas la même information. Et puis first c'est pas
très explicite comme nom de variable...
Quant à first et second, je me dis que si moi, débutant en C++, je sais à quoi ça correspond, quelqu'un de plus habitué saura de quoi ça parle...
Le problème c'est pas de savoir si first correspond bien au premier membre de la paire ou au second. Ca, effectivement, quelqu'un de moins habitué que toi le saura aussi (s'il a fait un peu d'anglais de base). Le problème c'est de savoir ce que représente le premier membre. A moins de documenter chaque ligne pour le préciser, c'est très simple de perdre le lecteur de ton code. Si tu utilises plusieurs paires dans ton code, tu auras des first qui ne stoquent pas la même information. Et puis first c'est pas très explicite comme nom de variable...
-- Vincent
Fabien LE LEZ
On Wed, 23 Jul 2003 23:22:17 +0200, "Vincent Lascaux" wrote:
Et puis first c'est pas très explicite comme nom de variable...
Je confirme... Perso, j'utilise std::pair<> uniquement à cause des itérateurs de std::map<>, et déjà là c'est pas très lisible.
-- Tout sur fr.* (FAQ, etc.) : http://www.usenet-fr.net/fur/ et http://www.aminautes.org/forums/serveurs/tablefr.html Archives : http://groups.google.com/advanced_group_search http://www.usenet-fr.net/fur/usenet/repondre-sur-usenet.html
Et puis first c'est pas
très explicite comme nom de variable...
Je confirme... Perso, j'utilise std::pair<> uniquement à cause des
itérateurs de std::map<>, et déjà là c'est pas très lisible.
--
Tout sur fr.* (FAQ, etc.) : http://www.usenet-fr.net/fur/
et http://www.aminautes.org/forums/serveurs/tablefr.html
Archives : http://groups.google.com/advanced_group_search
http://www.usenet-fr.net/fur/usenet/repondre-sur-usenet.html
On Wed, 23 Jul 2003 23:22:17 +0200, "Vincent Lascaux" wrote:
Et puis first c'est pas très explicite comme nom de variable...
Je confirme... Perso, j'utilise std::pair<> uniquement à cause des itérateurs de std::map<>, et déjà là c'est pas très lisible.
-- Tout sur fr.* (FAQ, etc.) : http://www.usenet-fr.net/fur/ et http://www.aminautes.org/forums/serveurs/tablefr.html Archives : http://groups.google.com/advanced_group_search http://www.usenet-fr.net/fur/usenet/repondre-sur-usenet.html
zoubidaman
"Vincent Lascaux" wrote in message news:<3f1efc81$0$22724$...
Quant à first et second, je me dis que si moi, débutant en C++, je sais à quoi ça correspond, quelqu'un de plus habitué saura de quoi ça parle...
Le problème c'est pas de savoir si first correspond bien au premier membre de la paire ou au second. Ca, effectivement, quelqu'un de moins habitué que toi le saura aussi (s'il a fait un peu d'anglais de base). Le problème c'est de savoir ce que représente le premier membre. A moins de documenter chaque ligne pour le préciser, c'est très simple de perdre le lecteur de ton code. Si tu utilises plusieurs paires dans ton code, tu auras des first qui ne stoquent pas la même information. Et puis first c'est pas très explicite comme nom de variable...
Donc effectivement dans ce cas là, l'utilisation d'une classe se révéle plus judicieuse...
Néanmoins, utiliser la STL permet également d'éviter de créer plusieurs classes "identiques" mais ne différant que par leurs noms de variables...
Ex: class foo { int toto; int tata; };
class foo2 { int titi; int tutu; };
Et là c'est le débutant qui vous pose la question suivante: est-il d'usage courant de créer des classes identiques, ne différant que par le nom de leurs variables?? Car on donne un nom de variable correspondant généralement à l'utilisation qu'on fait de la classe dans le code. Donc si on a besoin d'une classe identique, mais que les noms des variables n'ont plus grande signification, je serais tenté d'en créer une nouvelle, mais avec des noms de variables différents... Ca se fait ça???
Merci d'avance!!
"Vincent Lascaux" <nospam@nospam.org> wrote in message news:<3f1efc81$0$22724$626a54ce@news.free.fr>...
Quant à first et second, je me dis que si moi, débutant en C++, je
sais à quoi ça correspond, quelqu'un de plus habitué saura de quoi ça
parle...
Le problème c'est pas de savoir si first correspond bien au premier membre
de la paire ou au second. Ca, effectivement, quelqu'un de moins habitué que
toi le saura aussi (s'il a fait un peu d'anglais de base).
Le problème c'est de savoir ce que représente le premier membre. A moins de
documenter chaque ligne pour le préciser, c'est très simple de perdre le
lecteur de ton code. Si tu utilises plusieurs paires dans ton code, tu auras
des first qui ne stoquent pas la même information. Et puis first c'est pas
très explicite comme nom de variable...
Donc effectivement dans ce cas là, l'utilisation d'une classe se
révéle plus judicieuse...
Néanmoins, utiliser la STL permet également d'éviter de créer
plusieurs classes "identiques" mais ne différant que par leurs noms de
variables...
Ex:
class foo {
int toto;
int tata;
};
class foo2 {
int titi;
int tutu;
};
Et là c'est le débutant qui vous pose la question suivante:
est-il d'usage courant de créer des classes identiques, ne différant
que par le nom de leurs variables?? Car on donne un nom de variable
correspondant généralement à l'utilisation qu'on fait de la classe
dans le code. Donc si on a besoin d'une classe identique, mais que les
noms des variables n'ont plus grande signification, je serais tenté
d'en créer une nouvelle, mais avec des noms de variables différents...
Ca se fait ça???
"Vincent Lascaux" wrote in message news:<3f1efc81$0$22724$...
Quant à first et second, je me dis que si moi, débutant en C++, je sais à quoi ça correspond, quelqu'un de plus habitué saura de quoi ça parle...
Le problème c'est pas de savoir si first correspond bien au premier membre de la paire ou au second. Ca, effectivement, quelqu'un de moins habitué que toi le saura aussi (s'il a fait un peu d'anglais de base). Le problème c'est de savoir ce que représente le premier membre. A moins de documenter chaque ligne pour le préciser, c'est très simple de perdre le lecteur de ton code. Si tu utilises plusieurs paires dans ton code, tu auras des first qui ne stoquent pas la même information. Et puis first c'est pas très explicite comme nom de variable...
Donc effectivement dans ce cas là, l'utilisation d'une classe se révéle plus judicieuse...
Néanmoins, utiliser la STL permet également d'éviter de créer plusieurs classes "identiques" mais ne différant que par leurs noms de variables...
Ex: class foo { int toto; int tata; };
class foo2 { int titi; int tutu; };
Et là c'est le débutant qui vous pose la question suivante: est-il d'usage courant de créer des classes identiques, ne différant que par le nom de leurs variables?? Car on donne un nom de variable correspondant généralement à l'utilisation qu'on fait de la classe dans le code. Donc si on a besoin d'une classe identique, mais que les noms des variables n'ont plus grande signification, je serais tenté d'en créer une nouvelle, mais avec des noms de variables différents... Ca se fait ça???
Merci d'avance!!
Michael Monerau
Zoubidaman wrote:
class toto { int i,j; } toto foo;
vector<foo> test;
Juste une petite remarque en passant... Ici, ce que tu as écrit ne compile pas. Tu ne dois pas mettre un objet en argument du template... Donc ce code
class toto { int i,j; }
vector<toto> test;
voili :) Bon courage pour apprendre ! -- <=-Michaël"Cortex" Monerau.-=>
Zoubidaman wrote:
class toto
{
int i,j;
}
toto foo;
vector<foo> test;
Juste une petite remarque en passant... Ici, ce que tu as écrit ne compile
pas. Tu ne dois pas mettre un objet en argument du template... Donc ce code
class toto
{
int i,j;
}
vector<toto> test;
voili :)
Bon courage pour apprendre !
--
<=-Michaël"Cortex" Monerau.-=>