en cuenta lo siguiente:miembros de la estructura dentro de un vector
typedef struct {
int a;
int b;
int c;
int d;
} ABCD;
typedef std::vector<ABCD> VecABCD;
dicho que quiera sumar todos los 'a' miembro de un vector de tipo VecABCD. ¡Fácil! Recorro el vector y sumar a medida que avanzo.
int CalcSumOfA(const VecABCD &vec)
{
int sumOfA = 0;
VecABCD::const_iterator it;
for(it=vec.begin();it!=vec.end();it++)
sumOfA += it->a;
return sumOfA;
}
Dije que quería hacer lo mismo con 'b'? ¡Fácil! Escribiría ... esencialmente la misma función, pero con solo cambios triviales. Lo mismo con 'c' y 'd'.
Entonces, ¿hay alguna forma más concisa y menos repetitiva de hacer esto? Me gustaría hacer algo como:
int sumOfA = SumOfMembers(myVec, a);
pero no puedo concebir cómo podría poner juntas una función de este tipo. Idealmente, sería una plantilla, y podría usarlo con un vector de cualquier tipo de estructura, no específicamente vinculado a VecABCD. ¿Alguien tiene alguna idea?
+1 para acumular. ¿Qué ocurre con el desbordamiento de int? Alguna verificación de error es necesaria. –
El desbordamiento interno (o subdesbordamiento) dependería del caso de uso para esto; Probablemente emplearía el algoritmo de avestruz hasta que tuviera motivos para sospechar lo contrario. –
¿Está bind() en STL o solo en Boost? – Ari