OVH Cloud OVH Cloud

STL - for_each et Objet fonction

58 réponses
Avatar
fred
Bonjour,

l'id=E9e est assez simple. Comment puis je r=E9cup=E9rer une
variable/instance de type vector apr=E8s 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<int>.
Mais apr=E8s l'appel =E0 for_each comme puis je acc=E9der au vector ?

merci d'avance

Fr=E9d=E9ric

class ConvertCharToInt
{
vector<int> vFmt;
public:
void operator() (char c)
{
vFmt.push_back(atoi(c));
}
};

class CFmt
{
public :
string szFmt;
void GetStringFormat(const string a){ szFmt=3D a;};
void SplitFmt(){
std::for_each(szFmt.begin(),szFmt.end(),ConvertCharToInt());
};
};
main()
{
CFmt *obj;
obj=3D new CFmt;
obj->GetStringFormat("123456");
obj->SplitFmt();
delete obj;
}

10 réponses

1 2 3 4 5
Avatar
Franck Branjonneau
"fred" écrivait:

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<int>.
Mais après l'appel à for_each comme puis je accéder au vector ?


Tu n'es pas très clair, soigne ton expression.

// Les #include qui vont bien...
using namespace std;

class ConvertCharToInt
{
vector<int> vFmt;
public:
void operator() (char c)
{
vFmt.push_back(atoi(c));


atoi vraiment ?

}
};

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


Étonnant un «getter» non constant qui fait une assignation...

void SplitFmt(){


Pourquoi pas const ?

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


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

Ici convert.vFmt est (presque) accessible.

};
Le point virgule est en trop.

};

main()
{
CFmt *obj;
obj= new CFmt;


Pourquoi un objet crée à l'execution ?

obj->GetStringFormat("123456");


sic.

obj->SplitFmt();
delete obj;
}



--
Franck Branjonneau

Avatar
Fabien LE LEZ
On 22 Feb 2006 04:11:29 -0800, "fred" :

class ConvertCharToInt
{
vector<int> vFmt;
public:
void operator() (char c)
{
vFmt.push_back(atoi(c));
}
vector<int> GetData() const { return vFmt; }


void SplitFmt(){


ConvertCharToInt convertisseur;
std::for_each(szFmt.begin(),szFmt.end(),convertisseur);
le_tableau_qui_m_interesse= convertisseur.GetData();

Avatar
fred
ca ne marche pas.. désolé.
Avatar
Michel Decima
"Fabien LE LEZ" a écrit dans le message de
news:
On 22 Feb 2006 04:11:29 -0800, "fred" :

class ConvertCharToInt
{
vector<int> vFmt;
public:
void operator() (char c)
{
vFmt.push_back(atoi(c));
}
vector<int> GetData() const { return vFmt; }


ConvertCharToInt convertisseur;
std::for_each(szFmt.begin(),szFmt.end(),convertisseur);
le_tableau_qui_m_interesse= convertisseur.GetData();


Si je ne m'abuse, le tableau sera vide, parce que le convertisseur est copie
lors de l'appel de for_each.

struct ConvertCharToInt
{
vector<int>* vFmt;
ConvertCharToInt(vector<int>& v) : vFmt(&v) {}
void operator()(char c) const
{ vFmt->push_back(atoi(c)); }
};

vector<int> le_tableau;
std::for_each(szFmt.begin(),szFmt.end(), ConvertCharToInt(le_tableau);

et on pourrait aussi utiliser transform...


Avatar
fred
Merci Franck. Peux tu m'éclaircir sur tes remarques..comme :

Quel est le problème avec atoi ???

"Étonnant un «getter» non constant qui fait une assignation..."
C'est quoi un getter ?

j'ai essayé avec une instance de ConvertCharToInt mais ca ne marche
pas.
Avatar
fred
Merci Michael.

Pourquoi passer par une structure ?
Avatar
Michel Decima
"fred" a écrit dans le message de
news:
Merci Michael.

Pourquoi passer par une structure ?


Pour ne pas avoir a taper "public:", et parce que je ne vois pas l'interet
de mettre
des droits d'acces restreints sur un functor de ce genre.

Avatar
Franck Branjonneau
"Michel Decima" écrivait:

[ Le foncteur de std::for_each est passé par valeur. ]


Je me ferais toujours avoir.

et on pourrait aussi utiliser transform...


Le plus judicieux certainement.

--
Boujou t'chu tè.
Franck Branjonneau

Avatar
Fabien LE LEZ
On Wed, 22 Feb 2006 14:05:49 +0100, "Michel Decima"
:

Si je ne m'abuse, le tableau sera vide, parce que le convertisseur est copie
lors de l'appel de for_each.


Oups, oui, désolé.

J'ai trop l'habitude des boucles for(;;)...

Avatar
Franck Branjonneau
"fred" écrivait:

Pourquoi passer par une structure ?


Il n'y a pas de différence ici entre struct et class ? Apprend à
citer.

--
Franck Branjonneau

1 2 3 4 5