int main() { int ia[] = { 1, 1, 2, 3, 5, 8 }; list<int,allocator> ilist(ia, ia+6); list<int,allocator> ilist_result(ilist.size()); adjacent_difference(ilist.begin(), ilist.end(), ilist_result.begin() ); // generates output: 1 0 1 1 2 3 copy( ilist_result.begin(), ilist_result.end(), ostream_iterator<int>(cout," ")); cout << endl; adjacent_difference(ilist.begin(), ilist.end(), ilist_result.begin(), times<int>() ); // generates output: 1 1 2 6 15 40 copy( ilist_result.begin(), ilist_result.end(), ostream_iterator<int>(cout," ")); return 0; }
unsigned int fibonacci(unsigned int n) { if (n == 0) return 0; std::vector<int> v(n, 1); adjacent_difference(v.begin(), v.end()-1, v.begin()+1, std::plus<int>()); // "array" now contains the Fibonacci sequence from 1 up return v[n-1]; }
//数值算法 void stl_numeric_algo(){ double array[] = {-2,2,4,4,5}; double array1[] = {2,3,4,5,6}; vector<double> a(array,array + sizeof(array)/sizeof(double)); vector<double> b(array1,array1 + sizeof(array1)/sizeof(double)); vector<double> result(10); cout<<"accumulate func: "<<accumulate(a.begin(), a.end(), 0, minus<double>())<<endl; cout<<"inner product func: "<<inner_product(a.begin(),a.end(),b.begin(),0.0,plus<double>(),multiplies<double>())<<endl; adjacent_difference(a.begin(),a.end(),result.begin()); cout<<"adjacent_difference : "<<result<<endl; partial_sum(result.begin(),result.end(),result.begin()); cout<<"partial_sum : "<<result<<endl; ostream_iterator<double> myout(cout, " "); copy(result.begin(), result.end(), myout); }
inline void adjacent_difference(InputIt first, InputIt last, OutputF const& f) { using value_type = std::iterator_traits<InputIt>::value_type; return adjacent_difference(first, last, f, std::minus<value_type>()); }
inline OutputIt adjacent_difference( InputIt first, InputIt last, OuputIt result) { using value_type = geko::iterator::iterator_traits<InputIt>::value_type; return adjacent_difference(first, last, result, geko::functional::minus<value_type>()); }