c++ 范型算法与函数对象 初认识
2014-11-09 09:16
183 查看
一个很简单的缘由: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
}
函数对象的作用: 范型算法的实现独立于容器类型,它消除了算法对类型的依赖,另一方面,当一个算法作用于一个具体的容器,如何建立联系? <--- 使用 函数对象
通常,函数对象仅有一个成员函数,该函数重载函数调用操作符( 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
}
相关文章推荐
- 简化以下程序,将函数对象 divide_by 转换为一个函数,并将 for 循环替换为用一个标准的 C++ 算法来输出数据
- 对C++中函数对象的认识
- 从零开始学C++之STL(八):函数对象、 函数对象与容器、函数对象与算法
- 从零开始学C++之STL(八):函数对象、 函数对象与容器、函数对象与算法
- * 期末考试 编程题#7:字符串排序(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;函数对象作参数)
- C++之STL(八):函数对象、 函数对象与容器、函数对象与算法
- [C++] 通用算法、函数对象、lambda表达式、bind
- 期末考试 编程题#3:计算数列平方和(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;函数对象作参数)
- 关于在标准库算法中使用函数对象的一点认识
- C++程序设计语言--第十八章:算法和函数对象
- 从零开始学C++之STL(八):函数对象、 函数对象与容器、函数对象与算法
- 使用STL中的泛型算法及函数对象
- 浅析C++中虚函数的调用及对象的内部布局1 (来自:lizhe1985)
- 浅析C++中虚函数的调用及对象的内部布局
- 将函数对象用于标准库算法
- 浅析C++中虚函数的调用及对象的内部布局2 (来自:lizhe1985)
- 在Delphi与C++之间实现函数与对象共享
- 浅析C++中虚函数的调用及对象的内部布局
- C++指针探讨 (四) 函数对象
- C++函数对象 (Function object)