///////////////////////////////////////////////////////////////// // foreach.cpp - demonstrates use of foreach algorithms // // // // Jim Fawcett, CSE687 - Object Oriented Design, Spring 2005 // ///////////////////////////////////////////////////////////////// #include #include #include #include template struct showEach { void operator()(const T& t) const { std::cout << t << " "; } }; template void show(const C& c) { std::cout << "\n "; for_each(c.begin(), c.end(), showEach()); std::cout << "\n"; } template class Sum { public: Sum() : sum_(0) {} void operator()(T& t) { sum_ += t; } T result() { return sum_; } private: T sum_; }; void main() { std::cout << "\n Demonstrating for_each Algorithm " << "\n ==================================\n"; int array[13] = { -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; std::list li(&array[0], &array[13]); show(li); // foreach is the only algorithm that returns its operation, e.g., Sum() int sum = for_each(li.begin(),li.end(),Sum()).result(); std::cout << "\n sum of list = " << sum << "\n\n"; double darray[10] = { -2.5, -1.5, 0, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5 }; std::vector vd(&darray[0], &darray[10]); show(vd); double dsum = for_each(vd.begin(),vd.end(),Sum()).result(); std::cout << "\n sum of list = " << dsum << "\n\n"; }