Problème d'itérateur sur une structure

Potchi Messages postés 11 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 27 août 2004 - 26 août 2004 à 14:13
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 27 août 2004 à 20:12
Bonjour,

Petit problème de débutant :

J'ai une structure style

typedef struct Distrib_Annuelle
{
int Année ;
int Compteur ;
}

J'ai déclaré une liste : list<Distrib_Annuelle> L1;
et un itérateur : list<Distrib_Annuelle>::iterator courant;

maintenant je voudrai effectuer une recherche portant sur le champ 'Année' avec la l'algo find() de la librairie STL ...

courant = find(L1.begin(),L1.end(),??? et là ????);

Y aurait-il kelk'un pour m'éclairer pleazz........

Merci >>>

78 réponses

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
27 août 2004 à 17:27
ca fais pas tres c++
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
27 août 2004 à 17:28
dc

cool BLBString :: checkIn(BString)

enfin

BLBString = BListeIndir
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
27 août 2004 à 17:30
djl> do while pas possible ds ce cas,

C du pur remplacement ici
po une macro équivalente à une fonction

Magic Nono: l'informagicien! 8-)
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
27 août 2004 à 17:31
std::string::find

std::string::findr

std::find

std::strstr (c-style string)
...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
27 août 2004 à 17:33
magic_Nono > tu crois que je m'amuse à faire des

#define VAL_MAX do{ 100 }while(0)

:D
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
27 août 2004 à 17:35
djl> si T H E val sur T principe.... ça serait très possible....

mdr tes 2 derniers posts...

Magic Nono: l'informagicien! 8-)
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
27 août 2004 à 17:39
Posté par : magic_Nono
le 27/08/2004 17:28:02

cool ~> bool

Magic Nono: l'informagicien! 8-)
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
27 août 2004 à 17:41
ce que je veux dire (et que j'arrete pas de faire la nuance) c'est qu'il y a bien evidement des cas ou on echappe pas au macros

voici un exemple

#define TEMPLAT1 template<class TYPE_ELTS> BListeIndir<TYPE_ELTS>
#define TEMPLAT(retour) template<class TYPE_ELTS> retour BListeIndir<TYPE_ELTS>

par contre pourquoi tu utilise malloc et pas new?
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
27 août 2004 à 17:47
k

pas new : 2 raisons
- 1 la petite derniere n'existait pas :

#define ALLOUE2n(ptr,type,nb) do{\
if ((ptr = new type[nb])== NULL ) \
PB2("PAS ASSEZ DE MEMOIRE - Erreur allocation dynamique\n \t _ALLOUEn(ptr,type,nb)",-50);}while(0)

- 2 l'operateur RALLONGE (realloc) est inexploitable
(on en aV deja parlé)

#define RALLONGE(ptr,type) do{int taille; \
if (ptr != NULL) taille=_msize(ptr); else taille=0;\
if (( ptr = ( (type *)realloc(ptr,(size_t)(taille+ sizeof(type))) ) )== NULL) \
PB2("\n\nPAS ASSEZ DE MEMOIRE - Erreur de reallocation dynamique (_RALLONGE)\n\n",-50);}while(0)

Magic Nono: l'informagicien! 8-)
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
27 août 2004 à 17:50
tu t'arrange pour appeler le constructeur par defauts apres ?

et quand du detruits, comment tu t'arrange pour que l'objet appel sont destructeur ?
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
27 août 2004 à 18:03
youi, vive la france

rien compri

Magic Nono: l'informagicien! 8-)
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
27 août 2004 à 18:07
typiquement tu fais comment pour alouer et detruire un tableau d'objet ?
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
27 août 2004 à 18:09
pr la destruction : ben je met directement

ALLOUE2n
BDELETE2n : delete[] monTruc;

ou
ALLOUE2
BDELETEn : delete monTruc;

rq: delete renvoi bien un code si nok non?...

cad pr l'instant, G po défini ces BDELETE2, je met le delete correspondant

Magic Nono: l'informagicien! 8-)
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
27 août 2004 à 18:16
a vrai dire, je m'embete plus avec ça si C dynamique : BListeDir & BListeIndir en fonction si l'obj a une taille fixe ou non

pr du non dynamique ben:

un ex concret avec la table de hashage

BHashTable::BHashTable(unsigned int nbFragments)
{
/// ----------------------------------------------------------------------------------
/// ---------------- BHashTable::BHashTable(unsigned int nbFragments) ----------------
/// ----------------------------------------------------------------------------------
/// -----  Objectif	: Constructeur de la classe : BHashTable
/// -----  Auteur(s)	: Bruno CELLE 12/08/04
/// -----  PostCond	: Toutes les variables de la classe doivent être instanciées avec une valeur par défaut ou contextuelle
/// -----  Etat		: 1			(-1<0<1<2)
/// ----------------------------------------------------------------------------------
/// -----  unsigned int nbFragments	: nombre de fragments de hashage
/// ----------------------------------------------------------------------------------
/// -----  Var Utilisées de la classe (2)	: m_nbFragments ,m_table
/// -----  Var Muettes (cf.partie préc) (1)	: nbFragments
/// -----  Var Internes à la fonction (1)	: i
/// -----  Var Utilisées par adresse (1)	: m_table
/// -----  Var Masquées (1)	: nbFragments
/// -----  Var In  (1)	: nbFragments
/// -----  Var In-Out (2)	: m_nbFragments ,m_table
m_nbFragments=nbFragments;
ALLOUE2n(m_table,BListeIndir,nbFragments);
unsigned int i;
for(i=0;i<m_nbFragments;i++)
m_table[i].init(true,false);	//triés, ss doublons
m_iniSrcData="";
//	BVisuel::informe(toString());
}

BHashTable::~BHashTable()
{
/// -----------------------------------------------------------
/// ---------------- BHashTable::~BHashTable() ----------------
/// -----------------------------------------------------------
/// -----  Objectif	: Destructeur de la classe : BHashTable
/// -----  Auteur(s)	: Bruno CELLE 12/08/04
/// -----  PostCond	: Toutes les variables de la classe sont détruites
/// -----  Etat		: 1			(-1<0<1<2)
/// -----------------------------------------------------------
/// -----  Var Utilisées de la classe (2)	: m_nbFragments ,m_table
/// -----  Var Internes à la fonction (1)	: i
/// -----  Var Utilisées par adresse (1)	: m_table
/// -----  Var In  (2)	: m_nbFragments ,m_table

/*	unsigned int i;
for(i=0;i<m_nbFragments;i++)
delete(&(m_table[i]));
*/	delete[](m_table);
}



Magic Nono: l'informagicien! 8-)
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
27 août 2004 à 18:44
ok pour le delete
mais tu sais que tes conteneurs génériques doivent appeler le constructeur par defaut des objets alloués (si c'est pas fais avec new) ? sinon risque de plantage
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
27 août 2004 à 18:57
ui
...

& C po génial

G po trouver encore pr faire une macro pr ça:

m_table = new BListeIndir[nbFragments];

mé ça commence à me gaver ces macros car po d'err

Magic Nono: l'informagicien! 8-)
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
27 août 2004 à 19:10
a si... C possible....
en cas extreme

Dc utilisation des macros préférable car controle d'err

eux pr ces alloue, tu utiliserai une fonction template inline???

comment résoudrais tu ce pb sans macro ni réécrire le code à chaque fois?

Magic Nono: l'informagicien! 8-)
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
27 août 2004 à 20:12
a par quand j'utilise les conteneurs de la stl (ou je n'ai pas à gerer les alloc) j'utilise toujours en c++ new/delete et new[]/delete[] car par definition, en c++ tous les type sont des objets et seul les allocateur du c++ construisent et detruisent les objet

donc il te suffirais de remplacer malloc par new, mais si j'etais toi je ferais un truc bien securisé (fonction inline + template et catch std::bad_alloc vu que tu aimes bien les exceptions)

le seul truc qui te gene c'est qu'il n'y a pas de realloc en c++, alors tu fais comme vector, quand tu a besoin de reallouer tu alloue la nouvelle zone et tu copie le contenu de l'ancienne dans la nouvelle ( realloc aussi n'echappe pas à cette regle si la zone à reallouer depasse en taille l'espace contigue libre)

vu que ta vc++ 6, regarde comment sont foutu les carray, ca devrais t'aider (je n'ai plus vc++ mais je me rappel que c'etait bien foutu)
0
Rejoignez-nous