C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

[newbie] utiliser la stl

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
noone@nowhere.com
Guest





PostPosted: Sun Jan 23, 2005 5:31 pm    Post subject: Re: [newbie] utiliser la stl Reply with quote



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





PostPosted: Mon Jan 24, 2005 3:18 pm    Post subject: [newbie] utiliser la stl Reply with 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,
--
Pascal
Back to top
nmartin
Guest





PostPosted: Tue Jan 25, 2005 11:29 am    Post subject: Re: [newbie] utiliser la stl Reply with quote



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





PostPosted: Tue Jan 25, 2005 11:58 am    Post subject: Re: [newbie] utiliser la stl Reply with quote

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





PostPosted: Tue Jan 25, 2005 1:14 pm    Post subject: Re: [newbie] utiliser la stl Reply with quote

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





PostPosted: Tue Jan 25, 2005 8:42 pm    Post subject: Re: [newbie] utiliser la stl Reply with quote

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





PostPosted: Wed Jan 26, 2005 10:38 am    Post subject: Re: utiliser la stl Reply with quote

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





PostPosted: Wed Jan 26, 2005 10:55 am    Post subject: Re: utiliser la stl Reply with quote

[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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.