Recursion de std::accumulate.
Bonjour,
J'ai un ensemble de classes où chacune contient une liste de la classe suivante. J'aimerais à partir du sommet obtenir le total des éléments. Un peu de code pour mieux comprendre:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
class A
{
public:
std::vector<int> m_vectElts;
};
class B
{
public:
std::vector<A> m_vectA;
};
class C
{
public:
std::vector<B> m_vectB;
}; |
Partant d'un objet C, j'aimerais savoir combien de int j'ai au total.
Aujourd'hui j'arrive à faire ça:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
class A
{
public:
std::vector<int> m_vectElts;
int NbrElts()
{
return m_vectElts.size();
}
};
class B
{
public:
std::vector<A> m_vectA;
int NbrElts()
{
return std::accumulate
(
boost::make_transform_iterator(m_vectA.begin(),std::mem_fun_ref(&A::NbrElts)),
boost::make_transform_iterator(m_vectA.end(),std::mem_fun_ref(&A::NbrElts)),
0
);
}
};
class C
{
public:
std::vector<B> m_vectB;
int NbrElts()
{
return std::accumulate
(
boost::make_transform_iterator(m_vectB.begin(),std::mem_fun_ref(&B::NbrElts)),
boost::make_transform_iterator(m_vectB.end(),std::mem_fun_ref(&B::NbrElts)),
0
);
}
};
Puis les éléments:
std::cout<<c.NbrElts(); |
Mais, trimbaler un NbrElts tout le long de la chaîne ne me plaît pas trop. Je n'arrive pas à faire cette récursion avec boost. Je n'arrive pas à sortir quelque chose du genre:
Code:
1 2 3 4 5 6 7 8 9
|
std::accumulate
(
boost::make_transform_iterator(
MonC.m_vectB.begin(),std::accumulate(???)),
boost::make_transform_iterator(
MonC.m_vectB.end(),std::accumulate(???)),
0
); |
Quelqu'un aurait-il une idée?