// template<typename _InputIterator, typename _Tp, typename _BianryOperation>
// _Tp accumulate(_InputIterator __first, _InputIterator __last, _Tp __init, _BianryOperation __binary_op) {
// for (; __first != __last; ++__first)
// __init = __binary_op(__init, *__first);
// return __init;
// }
#include<iostream>
#include<vector>
#include<algorithm>
#include<numeric>
#include<functional>
using namespace std;
int sumSquares(int total, int value) {
return total + value * value;
}
template<class T>
void PrintInterval(T first, T last) {
for (; first != last; ++first) {
cout << *first << ",";
}
cout << endl;
}
template<class T>
class SumPowers {
private:
int power;
public:
SumPowers(int p):power(p) {}
const T operator()(const T& total, const T& value) {
T v = value;
for (int i = 0; i < power - 1; ++i)
v = v * value;
return total + v;
}
};
int main() {
const int SIZE = 10;
int a1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
vector<int> v(a1, a1 + SIZE);
cout << "1) "; PrintInterval(v.begin(), v.end());
int result = accumulate(v.begin(), v.end(), 0, sumSquares);
cout << "2) 平方和: " << result << endl;
result = accumulate(v.begin(), v.end(), 0, SumPowers<int>(3));
cout << "3) 立方和: " << result << endl;
result = accumulate(v.begin(), v.end(), 0, SumPowers<int>(4));
cout << "4) 四次方和: " << result << endl;
return 0;
}
greater 的应用
list 有两个sort成员函数
void sort(); 将list中的元素按 “<” 规定的比较方法升序排列。
template void sort (Compare op); 将list中的元素按 op 规定的比较方法升序排列。即要比较x,y 大小时,看 op(x,y)的返回值,为true则认为 x小于y
// template<class T>
// struct greater:public binary_function<T, T, bool> {
// bool operator()(const T& x, const T& y) const {
// return x > y;
// }
// };
#include<list>
#include<iostream>
using namespace std;
class MyLess {
public:
bool operator()(const int& c1, const int& c2) {
return (c1 % 10) < (c2 % 10);
}
};
template<class T>
void Print(T first, T last) {
for (; first != last; ++first)
cout << *first << ",";
}
int main() {
const int SIZE = 5;
int a[SIZE] = {5, 21, 14, 2, 3};
list<int> lst(a, a+SIZE);
lst.sort(MyLess());
Print(lst.begin(), lst.end());
cout << endl;
lst.sort(greater<int>());
Print(lst.begin(), lst.end());
cout << endl;
return 0;
}
学到这个地方发现以前很多不懂的东西现在好像都明白了,有一种醍醐灌顶的感觉。