Class dpoint {public: dpoint (double _ x, double _ y, double _ z): X (_ x), y (_ y), Z (_ z) {} Double X; Double Y; Double Z;}; Class pointaverage: Public binary_function <dpoint, dpoint, dpoint> {public: pointaverage (): xsum (0 ), ysum (0), zsum (0), numpoints (0) {} const dpoint operator () (const dpoint & avgsofar, const dpoint & P) {++ numpoints; xsum + = P. x; ysum + = P. y; zsum + = P. z; return dpoint (xsum/numpoints, ysum/numpoints, zsum/numpoints);} PRIVATE: Double xsum; double ysum; double zsum; size_t numpoints ;}; int main () {list <double> LD; lD. push_back( 1.0); lD. push_back( 2.0); lD. push_back( 3.0); lD. push_back( 4.0); double sum = accumulate (LD. begin (), LD. end (), 0.0); cout <sum <Endl; double Product = accumulate (LD. begin (), LD. end (), 1.0, multiplies <double> (); cout <product <Endl; vector <dpoint> PV; PV. push_back (dpoint (2, 3, 5); PV. push_back (dpoint (3, 4, 5); PV. push_back (dpoint (5, 6, 2); dpoint AVG = accumulate (Pv. begin (), PV. end (), dpoint (0, 0), pointaverage (); cout <avg. x <"" <avg. Y <"" <avg. z <Endl ;}