一个很简单的缘由:stl::vector 怎么做加法。使用函数对象
函数对象的作用: 范型算法的实现独立于容器类型,它消除了算法对类型的依赖,另一方面,当一个算法作用于一个具体的容器,如何建立联系? <--- 使用 函数对象
通常,函数对象仅有一个成员函数,该函数重载函数调用操作符( operator() ), 函数对象作为实参传递给范型算法。
2 #include <assert.h>
3 #include <numeric>
4 using namespace std;
5
6 #include "Vector.h"
7 class MinusClass
8 {
9 public:
10 Vector2f operator() (Vector2f p1, Vector2f p2) const {return p1-p2;};
11 };
12
29 vector<Vector2f> NextPos (PositionVector.begin()+1, PositionVector.end());
30 vector<Vector2f> LastPos (PositionVector.begin(),PositionVector.end()-1);
31
32 assert(NextPos.size()==Num+1);
33 assert(LastPos.size()==Num+1);
34
35 vector<Vector2f> DeltaPos;
36 transform(LastPos.begin(), LastPos.end(), NextPos.begin(), DeltaPos.begin(), MinusClass());
37
38 for(vector<Vector2f>::iterator iter=DeltaPos.begin(); iter != DeltaPos.end(); iter++)
39 {
40 float slope = (iter->z)/(iter->x);
41 bg_tang.push_back(normalize(Vector2f(1,slope)));
42 bg_normal.push_back(normalize(Vector2f(-slope,1)));
43 }