// MT2Q6a.cpp #include #include #include #include ///////////////////////////////////////////////////////// // This works, but is not as neat as MT2Q6 because // the compiler needs help in deducing the return type template V average(const C& con) { if(con.size() == 0) return 0; C::const_iterator iter = con.begin(); V sum = *iter; while(++iter!=con.end()) sum += *iter; return sum/con.size(); } //template class C> //typename V anotherAverage(const C& con) //{ // if(con.size() == 0) // return 0; // C::const_iterator iter = con.begin(); // V sum = *iter; // while(++iter!=con.end()) // sum += *iter; // return sum/con.size(); //} // //template class C> //class averageFunctor //{ //public: // V operator()(const C& con) // { // if(con.size() == 0) // return 0; // C::const_iterator iter = con.begin(); // V sum = *iter; // while(++iter!=con.end()) // sum += *iter; // return sum/con.size(); // } //}; // void main() { std::vector vecd; vecd.push_back(1.5); vecd.push_back(2.0); vecd.push_back(2.5); std::cout << "\n " << average, double>(vecd) << "\n"; std::list listd(vecd.begin(), vecd.end()); std::cout << "\n " << average, double>(listd) << "\n"; std::set setd(vecd.begin(), vecd.end()); std::cout << "\n " << average, double>(setd) << "\n\n"; //vecd.clear(); //vecd.push_back(1.5); //vecd.push_back(2.0); //vecd.push_back(2.5); //averageFunctor< double, std::vector > anotherAverage; //std::cout << "\n " << anotherAverage(vecd) << "\n"; //std::list listd(vecd.begin(), vecd.end()); //std::cout << "\n " << average, double>(listd) << "\n"; //std::set setd(vecd.begin(), vecd.end()); //std::cout << "\n " << average, double>(setd) << "\n\n"; }