STL : algo. for_each et Objet fonction

cs_fm29 Messages postés 10 Date d'inscription mercredi 22 février 2006 Statut Membre Dernière intervention 22 février 2006 - 22 févr. 2006 à 10:39
Alpacha Messages postés 95 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 20 mars 2006 - 22 févr. 2006 à 16:02
Bonjour,



l'idée est assez simple. Comment puis je récupérer une variable/instance de type vector après l'appel l'algorithm for_each.

Comme dans l'exemple. Je parcours une string. pour chaque car. convertit en entier que je place dans un vector.

Mais après l'appel à for_each comme puis je accéder au vector ?



merci d'avance



Frédéric



class ConvertCharToInt

{

vector vFmt;

public:

void operator() (char c)

{

vFmt.push_back(atoi(c));

}

};



class CFmt

{

public :

string szFmt;

void GetStringFormat(const string a){ szFmt= a;};

void SplitFmt(){

std::for_each(szFmt.begin(),szFmt.end(),ConvertCharToInt());

};

};

main()

{

CFmt *obj;

obj= new CFmt;

obj->GetStringFormat("123456");

obj->SplitFmt();

delete obj;

}

21 réponses

Alpacha Messages postés 95 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 20 mars 2006
22 févr. 2006 à 13:01
Que penses-tu de mettre :
vector& getVector() const {
return vFmt;
}
dans ta class ConverCharToInt
?
0
cs_fm29 Messages postés 10 Date d'inscription mercredi 22 février 2006 Statut Membre Dernière intervention 22 février 2006
22 févr. 2006 à 13:06
Pourquoi pas... mais comment puis je appeller la méthode ?

Car je n'ai pas d'instance de classe ConvertCharToInt
0
Alpacha Messages postés 95 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 20 mars 2006
22 févr. 2006 à 13:11
Ah oui je n'avais pas vu.
Hé bien tu peux procéder comme ça :
Tu mets ton vector dans une autre class, disons vFmt.
dans ConvertCharToInt tu demande un char, comme là, mais aussi un vector par référence, pour le remplir avec les int.
Tu créés une instance de vFmt avant le for_each.
Tu passes comme prévu le vector de vFmt à ConvertCharToInt, dans le for_each.
Et après le foreach, ton vector est donc rempli et tu peux y accéder.
0
cs_fm29 Messages postés 10 Date d'inscription mercredi 22 février 2006 Statut Membre Dernière intervention 22 février 2006
22 févr. 2006 à 13:58
marche pas... :)



car comment puis je lui passer le paramètre char ????



class vFmt

{

public :

vector vFmt;

};



class ConvertCharToInt

{

public:

void operator() (char c,vector& vFmt)

{

vFmt.push_back(atoi(c));

}

};



class CFmt

{

public :

string szFmt;

void GetStringFormat(const string a){ szFmt= a;};

void SplitFmt(){

vFmt vect;

std::for_each(szFmt.begin(),szFmt.end(),ConvertCharToInt(vect.vFmt));

};

};

main()

{

CFmt *obj;

obj= new CFmt;

obj->GetStringFormat("123456");

obj->SplitFmt();

delete obj;

}
0

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

Posez votre question
Alpacha Messages postés 95 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 20 mars 2006
22 févr. 2006 à 14:33
Quelle est l'erreur?
Et en inversant l'ordre des arguments de ConvertCharToInt ?
0
cs_fm29 Messages postés 10 Date d'inscription mercredi 22 février 2006 Statut Membre Dernière intervention 22 février 2006
22 févr. 2006 à 14:50
Même en inversant l'ordre des arguments.. Dans ."void operator() (char c,vector& vFmt) ??" .--->

void operator() (vector& vFmt,char c) -- Pareil



(S) An expression of type "std::vector >" cannot be converted to type "ConvertCharToInt".I)



(I) The call does not match any parameter list for "ConvertCharToInt::ConvertCharToInt".

(I) "implicit ConvertCharToInt::ConvertCharToInt(const ConvertCharToInt &)" is not a viable candidate.

(I) An expression of type "std::vector
>" cannot be converted to type "const ConvertCharToInt &".
0
Alpacha Messages postés 95 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 20 mars 2006
22 févr. 2006 à 14:56
Bizarre ... il croit que l'on appelle le constructeur de copie ...
Au pire tu peux spécifier comme ça :
for_each(...,...,ConvertCharToInt::operator(vec.vFmt));
Qui sait? :p
Et est-ce que en mettant le vector dans ConvertCharToInt et en créant une instance de ce dernier, ca arrangerait pas le pb, tout simplement ?
0
cs_fm29 Messages postés 10 Date d'inscription mercredi 22 février 2006 Statut Membre Dernière intervention 22 février 2006
22 févr. 2006 à 15:03
:))



Alors .... first )



(S) The operator symbol is not recognized.



next )



non plus. ai déjà essayé.
0
Alpacha Messages postés 95 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 20 mars 2006
22 févr. 2006 à 15:24
Je crosi avoir trouvé ...
class ConvertCharToInt
{
vector vFmt;
public:
void operator() (char c)
{
vFmt.push_back(atoi(&c));
}
vector& getVector() { return vFmt; }
};

class CFmt
{
public :
string szFmt;
void GetStringFormat(const string a){ szFmt= a;};
vector& SplitFmt(){

ConvertCharToInt ccti = std::for_each(szFmt.begin(),szFmt.end(),ConvertCharToInt());
return ccti.getVector();
}
};
main()
{
CFmt *obj;
obj= new CFmt;
obj->GetStringFormat("123456");
vector v = obj->SplitFmt();
delete obj;
}

Reste à voir si atoi() fait bien son boulot, car je préfère les stringstream (<sstream>) ...
0
Alpacha Messages postés 95 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 20 mars 2006
22 févr. 2006 à 15:26
Ps : je me suis basé sur http://www.sgi.com/tech/stl/for_each.html
Bonne progr'
Tiens au courant
0
cs_fm29 Messages postés 10 Date d'inscription mercredi 22 février 2006 Statut Membre Dernière intervention 22 février 2006
22 févr. 2006 à 15:33
merci ca fonctionne !! super...

En fait for_each transmet une copie c'est ca ??
0
Alpacha Messages postés 95 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 20 mars 2006
22 févr. 2006 à 15:36
Apparemment for_each renvoie un objet de type <le foncteur transmis en 3eme argument> ...
Je l'avais vu mais j'avais jamais tilté^^
Et sinon, tu as bien ce que tu veux en sortie ? Ton vector contient les bons nombres ?
0
Alpacha Messages postés 95 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 20 mars 2006
22 févr. 2006 à 15:36
Apparemment for_each renvoie un objet de type <le foncteur transmis en 3eme argument> ...
Je l'avais vu mais j'avais jamais tilté^^
Et sinon, tu as bien ce que tu veux en sortie ? Ton vector contient les bons nombres ?
0
cs_fm29 Messages postés 10 Date d'inscription mercredi 22 février 2006 Statut Membre Dernière intervention 22 février 2006
22 févr. 2006 à 15:47
Oui parfait !!! Cette solution est super.

Les nombres sont exacts.

Merci ! super fort... :)
0
cs_fm29 Messages postés 10 Date d'inscription mercredi 22 février 2006 Statut Membre Dernière intervention 22 février 2006
22 févr. 2006 à 15:49
Par contre je n'ai pas essayé avec atoi(&c) .. mais avec atoi(c).... je crois que c'est ok comme ca.
0
Alpacha Messages postés 95 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 20 mars 2006
22 févr. 2006 à 15:49
à la revoyure
0
cs_fm29 Messages postés 10 Date d'inscription mercredi 22 février 2006 Statut Membre Dernière intervention 22 février 2006
22 févr. 2006 à 15:49
non désolé pour le message précédent.. des conneries que j'raconte. je suis un peu fatigué maintenant
0
Alpacha Messages postés 95 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 20 mars 2006
22 févr. 2006 à 15:50
Ah? parce que moi le compilo n'a pas aimé atoi(c) ...
Enfin, peu importe, si ça marche :)
Bonne progr'
0
Alpacha Messages postés 95 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 20 mars 2006
22 févr. 2006 à 15:56
Ah? c'est bien &c ?
0
cs_fm29 Messages postés 10 Date d'inscription mercredi 22 février 2006 Statut Membre Dernière intervention 22 février 2006
22 févr. 2006 à 16:00
oui ! bien sûr... en fait je convertie une chaîne et pas un car... mais
j'ai voulu simplifier la fonction operator() .... pour pas mettre trop
de code dans l'exemple.
0
Rejoignez-nous