 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
noone@nowhere.com Guest
|
Posted: Sun Jan 23, 2005 5:31 pm Post subject: Re: [newbie] utiliser la stl |
|
|
Pascal wrote:
| Quote: | Bonjour,
Je débute la programmation en c++ sous linux. J'ai entendu parler de la
stl. J'ai besoin d'un tableau à deux dimension, qui contient sur la
première colonne des types char *, et sur la deuxième colonne des types
int (que des 1 ou 2).
ex : Soit le tableau suivant
machin | 1
bidule | 2
truc | 1
Admettons j'ai un couple (truc, 2). Or dans le tableau, truc a une
valeur de 1. Donc mon couple est faux. Il me faut donc une fonction qui
recherche dans ce tableau. J'ai aussi besoin de pouvoir insérer des
couples dans ce tableau. Quel classe de la stl me conseillez vous? Et
comment faire pour l'utiliser sous linux, car j'ai trouvé pas mal de
classe de la stl (comme vector, deque etc...) et les fonctions qui s'y
rapporte, mais comment faire pour les utiliser?
Cordialement,
|
De débutant à débutant je te répond ;-)
Pourquoi ne pas faire une classe Ma_Classe_perso ?
cette classe contient des machin, bidule, truc : dans m_machin membre
machin (private)
cette classe contient des entiers : m_nombre (private)
Ensuite tu places tes objets de Ma_Classe_perso dans le conteneur STL
que tu veux (une "list", un "vector")
La fonction dont tu parles (qui a pour rôle de vérifier si truc est en
accord avec l'entier) peut être le constructeur de ta classe...
Mais si tu pouvait prendre des exemples plus parlant...
Donc première chose à faire créer ta classe pour contenir *un* élément
(machin | 1)...
Cordialement
|
|
| Back to top |
|
 |
Pascal Guest
|
Posted: Mon Jan 24, 2005 3:18 pm Post subject: [newbie] utiliser la stl |
|
|
Bonjour,
Je débute la programmation en c++ sous linux. J'ai entendu parler de la
stl. J'ai besoin d'un tableau à deux dimension, qui contient sur la
première colonne des types char *, et sur la deuxième colonne des types
int (que des 1 ou 2).
ex : Soit le tableau suivant
machin | 1
bidule | 2
truc | 1
Admettons j'ai un couple (truc, 2). Or dans le tableau, truc a une
valeur de 1. Donc mon couple est faux. Il me faut donc une fonction qui
recherche dans ce tableau. J'ai aussi besoin de pouvoir insérer des
couples dans ce tableau. Quel classe de la stl me conseillez vous? Et
comment faire pour l'utiliser sous linux, car j'ai trouvé pas mal de
classe de la stl (comme vector, deque etc...) et les fonctions qui s'y
rapporte, mais comment faire pour les utiliser?
Cordialement,
--
Pascal
|
|
| Back to top |
|
 |
nmartin Guest
|
Posted: Tue Jan 25, 2005 11:29 am Post subject: Re: [newbie] utiliser la stl |
|
|
Pascal wrote:
| Quote: | Bonjour,
bonjour
Je débute la programmation en c++ sous linux. J'ai entendu parler de la
stl. J'ai besoin d'un tableau à deux dimension, qui contient sur la
première colonne des types char *, et sur la deuxième colonne des types
int (que des 1 ou 2).
ex : Soit le tableau suivant
machin | 1
bidule | 2
truc | 1
Admettons j'ai un couple (truc, 2). Or dans le tableau, truc a une
valeur de 1. Donc mon couple est faux. Il me faut donc une fonction qui
recherche dans ce tableau. J'ai aussi besoin de pouvoir insérer des
couples dans ce tableau. Quel classe de la stl me conseillez vous?
|
map me semble bien adaptée.
typedef std::map<std::string, int> MaMap;
MaMap table;
pour la recherche, on aura :
typename MaMap::iterator it;
it = table.find("bidule");
if(it != table.end()){
// l'element existe
string clef = it->first;
int value = it->second;
}
pour l'insertion :
table.insert(MaMap::value_type("toto", 1));
nico
|
|
| Back to top |
|
 |
Pascal Guest
|
Posted: Tue Jan 25, 2005 11:58 am Post subject: Re: [newbie] utiliser la stl |
|
|
On Tue, 25 Jan 2005 12:29:13 +0100, nmartin wrote:
| Quote: | pour l'insertion :
table.insert(MaMap::value_type("toto", 1));
|
C'est aussi ce que j'ai utilisé. Mais pour l'insertion, je fais :
MaMap["toto"] = 1;
Quelle est la différence?
|
|
| Back to top |
|
 |
nmartin Guest
|
Posted: Tue Jan 25, 2005 1:14 pm Post subject: Re: [newbie] utiliser la stl |
|
|
Pascal wrote:
| Quote: | On Tue, 25 Jan 2005 12:29:13 +0100, nmartin wrote:
pour l'insertion :
table.insert(MaMap::value_type("toto", 1));
C'est aussi ce que j'ai utilisé. Mais pour l'insertion, je fais :
MaMap["toto"] = 1;
Quelle est la différence?
|
pour l'insertion il n'y a pas de différence, par contre pour la
recherche il vaut mieux eviter l'operateur [] qui va creer une entree
dans la map avec une valeur pas defaut.
|
|
| Back to top |
|
 |
Arnaud Debaene Guest
|
Posted: Tue Jan 25, 2005 8:42 pm Post subject: Re: [newbie] utiliser la stl |
|
|
Pascal wrote:
| Quote: | On Tue, 25 Jan 2005 12:29:13 +0100, nmartin wrote:
pour l'insertion :
table.insert(MaMap::value_type("toto", 1));
C'est aussi ce que j'ai utilisé. Mais pour l'insertion, je fais :
MaMap["toto"] = 1;
Quelle est la différence?
|
S'il y a déjà une entrée "toto" dans la map, ta version va l'écraser sans te
le dire alors que insert te permettra de savoir si tu as écrasé une valeur
existante ou pas.
Arnaud
|
|
| Back to top |
|
 |
kanze@gabi-soft.fr Guest
|
Posted: Wed Jan 26, 2005 10:38 am Post subject: Re: utiliser la stl |
|
|
Arnaud Debaene wrote:
| Quote: | Pascal wrote:
On Tue, 25 Jan 2005 12:29:13 +0100, nmartin wrote:
pour l'insertion :
table.insert(MaMap::value_type("toto", 1));
C'est aussi ce que j'ai utilisé. Mais pour l'insertion, je fais :
MaMap["toto"] = 1;
Quelle est la différence?
S'il y a déjà une entrée "toto" dans la map, ta version va
l'écraser sans te le dire alors que insert te permettra de
savoir si tu as écrasé une valeur existante ou pas.
|
Correction : insert n'écrase jamais. S'il y a déjà un élément
avec la clé donnée, insert le laisse, sans le modifier. (Une
autre différence, c'est que insert fonctionne même si le type de
l'objet n'a pas de constructeur par défaut.)
--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
|
|
| Back to top |
|
 |
kanze@gabi-soft.fr Guest
|
Posted: Wed Jan 26, 2005 10:55 am Post subject: Re: utiliser la stl |
|
|
[email]kanze (AT) gabi-soft (DOT) fr[/email] wrote:
| Quote: | Arnaud Debaene wrote:
Pascal wrote:
On Tue, 25 Jan 2005 12:29:13 +0100, nmartin wrote:
pour l'insertion :
table.insert(MaMap::value_type("toto", 1));
C'est aussi ce que j'ai utilisé. Mais pour l'insertion, je fais
:
MaMap["toto"] = 1;
Quelle est la différence?
S'il y a déjà une entrée "toto" dans la map, ta version va
l'écraser sans te le dire alors que insert te permettra de
savoir si tu as écrasé une valeur existante ou pas.
Correction : insert n'écrase jamais. S'il y a déjà un élément
avec la clé donnée, insert le laisse, sans le modifier. (Une
autre différence, c'est que insert fonctionne même si le type
de l'objet n'a pas de constructeur par défaut.)
|
Une autre différence, peut-être même plus importante, me vient à
l'esprit : le comportament vis-à-vis des exceptions.
L'expression « MaMap[ "toto" ] = quelqueChose » finit par un
appel à un opérateur d'affectation, avec l'insertion achevée. Si
cette affectation lève une exception, l'élément aura bien été
créé dans le map, mais avec comme valeur la valeur par défaut.
Je ne sais pas exactement ce que la norme garantit en cas
d'insert, mais ça serait une très mauvaise implémentation qui ne
donnait pas la garantie forte, c-à-d que si on sort d'insert par
une exception, l'état du map est inchangé par rapport à avant
l'appel d'insert.
Donc, si on a un map<string,string>, et on fait :
maMap[ "toto" ] = "titi" ;
s'il y a une exception lors de l'affectation (disons un
bad_alloc), le map contiendra une entrée ("toto",""). Si on fait
avec insert, en cas d'exception, n'importe où dans l'expression,
il n'aura pas d'entrée "toto" dans le map.
--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|