- 浏览: 178459 次
- 性别:
- 来自: 福州
文章分类
最新评论
-
别样人生:
thank you
Linux 入门教程 -
johlon:
能不能发个Demo看看,谢谢!
Gson——循环引用的解决方案 -
strong_fee:
你可以从后台返回dept对象,这个对象里边包含emp集合。
Gson——循环引用的解决方案 -
遇见的秘密花园:
可不可以加我QQ呀 282632256 我想问你一些问题。 ...
Spring总结 -
遇见的秘密花园:
我没怎么看懂。。。我现在在做S2H集成的时候。遇到一个问题。d ...
Gson——循环引用的解决方案
函数对象就是一个类,但它和回调函数一样可以被回调。
1. 可以与()联合使用的形式有:函数名、指向函数的指针和重载了()操作符的对象。
2. for_each() 的原型为:
template<class InputIterator, class Function>
Function for_each(InputIterator, InputIterator last, Function f);
对于应用中的函数f可申明为: void ShowView(const Review &);//即将(void *)(const Review&)赋值给模板参数Function 的类型。
Function参数可表示具有重载的()操作符的类类型。
3. 函数符的概念:
生成器:不用参数就可以调用的函数符。
一元函数:有一个参数可以调用。二元函数同理。
断言:返回bool值的一元函数。
二元断言:返回bool值的二元函数。
将断言作为参数举例:
bool tooBig(int n){return n>100;}
list<int> scores; scores.remove_if(tooBig);
将函数对象作为remove_if()的参数:
template<class T>
class TooBig{
private: T cutoff;
public: TooBig(const T &t):cutoff(t){}
bool operator(const T & v){return v>cutoff;}
};
void main(){
TooBig<int> f100(100);
list<int> ya;
int val[10]={20,50,100,…};
ya.insert(ya.begin(), val, val+10);
ya.remove_if(f100);
ya.remove_if(TooBig<int>(200));
}
4. 模板类函数对象:
用法如:
plus<double> add; double y=add(2.2, 3.2);
transform(gr.begin(), gr.end(), m.begin(), out, plus<double>());
操作符和相应的函数符:
操作符 |
相应的函数 |
操作符 |
相应的函数 |
+ |
plus |
> |
greater |
- |
minus |
< |
less |
* |
multiplies |
>= |
greater_equal |
/ |
divides |
<= |
less_equal |
% |
modulus |
&& |
logical_and |
- |
negate |
|| |
logical_or |
== |
equal_to |
! |
logical_not |
!= |
not_equal_to |
|
|
5. 自适应函数符和函数适配器:
绑定函数:
绑定器函数对象(被绑定函数对象必须为双目函数)
STL 中的帮定器有:
bind1st() 创建一个函数对象,该函数对象将值V作为第一个参数A。
bind2nd()创建一个函数对象,该函数对象将值V作为第二个参数B。
用法举例:
count_if(aList.begin(), aList.end(),bind1st(greater<int>(), 8), k);//计算所有小于或等于8的对象的数目,k为个数的应用,如果没有该参数,则返回在值为个数。
否定函数对象:就是它从另一个函数对象创建而来,如果原先的函数返回真,则否定函数对象返回假。
自适应函数:携带了参数类型和返回值类型的typedef成员,这些成员分别是result_type、 first_argument_type和second_augument_type.
将二元函数变成一元函数的方法(binder1st和binder2nd的用法):
binder1st的对象将自适应函数的第一个参数的特定值相关联;binder2nd的对象将自适应函数的第二个参数的特定值相关联。
令f2()是一个带两个参数的自适应函数
binder1st(f2, val) f1; 返回的值与将val作为第一个参数、将f1()的参数作为第二个参数的f2()相同,即f(x)等价于f2(val, x);
STL提供bind1st以简化binder1st类的使用:
bind1st(multiplies<double>(), 2.5); binder2nd和bind2nd用法同理。
7. 否定函数对象:就是它从另一个函数对象创建而来,如果原先的函数返回真,则否定函数对象返回假。 有两个否定函数对象:not1()和not2()。not1()接受单目函数对象,not2()接受双目函数对象。否定函数对象通常和绑定器一起使用。
用法如:
start = find_if(aList.begin(), aList.end(), not1(bind1nd(greater<int>(), 8)));//计算q>8,必须使用not1,因为bind1nd返回单目函数。
二 算法
(1) 算法组:
1) 非修改式序列操作(头文件algorithm,前algo.h)
对区间中的每个元素进行操作,不改变容器的内容。
2) 修改式序列操作(头文件algorithm,前algo.h)
可以修改容器中的内容,可以修改值,也可以修改值的排列顺序,如transform()、random_shuffle()和copy()。
3) 排序和相关操作(头文件algorithm,前algo.h)
包括多个排序函数(如sort())和其他各种函数,如集合操作。
4) 通用数字运算(头文件numeric,前algol.h)
(2) 常用算法:
1) transform:将迭代区间中的值改变后存入另一个迭代器中。其有两种形式:
1.1 transform()接受四个参数:
前两个参数是指定容器区间的迭代器,第三个参数是接受复制结果的迭代器,最后一个参数是一个一元函数符(),被用于区间中的每个元素,生成结果中的新元素。用法如:
cout int LIM=5;
double arr[LIM]={25,23,55,23,64};
vector<double> gr(arr, arr+LIM);
ostream_iterator<double, char> out (cout, “”);
transform(gr.begin(), gr..end(), out, sqrt);
1.2 transform()接受五个参数的函数,并将该函数用于两个区间中元素,用第三个参数标识两个参数的起始位置。用法如:
令m是一个vector<double>的对象,mean(double, double)返回两个值的平均值。
transform(gr.begin(), gr.end(), m.begin(), out, mean);
set<string> wordset;
transform(words.begin(), words.end(),
insert_itereator<set<string>>(wordset, wordset.begin()), ToLower))
(2)copy:将一个迭代区间中的值赋值给另一个迭代区间
函数原型:
template<class InputIterator, class OutputIterator>
OutputIterator copy(InputIterator first, InputIterator last, OutputIterator result);
用法如:
ostream_itereator<string, char>out(cout, “ ”);//有的编译器为ostream_iterator<int> out(cout, “ ”);
copy(c.begin(), c.end(), out); //将元素拷贝到输出流
(3) replace:在迭代区间中,用新值代替旧值。用两种形式:
3.1 replace的就地版本原型(四个参数):结果被存放在原始数据的位置。
template<class ForwardIterator, Class T>
void replace(ForwardIterator first, ForwardIterator last, const T& old_value,
const T& new_value);
3.2 replace的复制版本原型(五个参数):结果被发送到另一个位置。
template<class InputIterator, class OutputIterator, Class T>
void replace_copy(InputIterator first, InputIterator last, OutputIterator result, const T& old_value, const T& new_value);
用法举例:
vector<int> V;
V.push_back(1);
V.push_back(2);
V.push_back(3);
V.push_back(1);
replace(V.begin(), V.end(), 1, 99);
(4) replace_if:从区间中移除断言为真的元素。
函数原形为:
void replace_if(ForwardIterator fist, ForwardIterator last, Predicate pred);
(5) for_each():对于区间中的每个元素都进行f操作。
Function for_each(InputIterator, InputIterator last, Function f);
对于应用中的函数f可申明为: void ShowView(const Review &);//即将(void *)(const Review&)赋 值给模板参数Function 的类型。Function参数可表示具有重载的()操作符的类类型。
(6) accumulate() 算法(#include <numeric>):计算容器中所有值的总和。
这样的值不一定是简单的类型,通过重载operator+(),也可以是类对象。
两种函数原形:
6.1 T accumulate(InputIterator first, InputIterator last, T init);// result = result + *i
6.2 T accumulate(InputIterator first, InputIterator last, T init,
BinaryFunction binary_op);// result = binary_op(result, *i)
用法举例:
vector<long> v(MAX);
for (int i = 0; i < MAX; i++)
v[i] = i + 1;
long sum =accumulate(v.begin(), v.end(), 0);
cout << "Sum of values == " << sum << endl;
long product =accumulate(v.begin(), v.end(), 1, multiplies<long>());//注意这行
cout << "Product of values == " << product << endl;
发表评论
-
STL map的使用方法
2009-05-11 22:43 3933一 map内部数据的组织 map内部自建一颗红黑树(一 ... -
几个控件的学习笔记
2009-05-11 22:41 1688一 按钮的使能与禁止用ClassWizard的Membe ... -
MessageBox的常见用法
2009-05-11 22:40 5121一 函数原型及参数 function Me ... -
BSTR 、LPCTSTR、CString附C语言串基本操作
2009-05-11 22:39 4685一 CString ,BSTR ,LPCTSTR之间关系 ... -
MFC CString 用法
2009-05-11 22:37 9108读Visual C++ 开发经验技巧宝典第二章—-数据类型 ... -
MFC SetTimer函数的用法
2009-05-11 22:35 20636一 SetTimer函数的用法 1) 函数原型及变形 ... -
C++ 文件操作
2009-05-11 22:34 4697读 《C++ Primer Plus》第17 ... -
C++排序算法 algorithm
2009-05-11 22:31 2481学习网站:http://www.stlchina.org/tw ... -
STL容器(二)(附件Effective.STL)
2009-04-16 22:20 1498上:STL容器(1) 二 联合容器(对容器概念的另一 ... -
STL容器(一)(附件STL帮助手册)
2009-04-16 22:12 2931解决STL编译警告的方法,在头文件的i ... -
读 《C++ Primer Plus》第17章 输入输出(一)
2009-03-23 22:46 1634读 《C++ Primer Plus》第17章1-3节 一 ... -
读《Primer Plus C++》第十一章 使用类
2009-03-23 22:42 1128读《Primer Plus C++》第十一章 使用类 ... -
C、C++中的日期和时间 time_t与struct tm转换
2009-03-23 22:32 4100一.概念Coordinated Universal Time( ... -
Visual C++ 6.0调试功能
2009-03-22 22:51 1638注:本文转自www.javablog.net/tidelgl/ ... -
Socket(三)
2009-03-22 22:22 1092一个典型的TCP端口扫描器,通过用connect函数对服务器进 ... -
Socket(二)
2009-03-22 22:21 13882)提出连接申请 在成功调用了socket函数后,对客户端来 ... -
Socket(一)
2009-03-20 22:41 1623参考:http://tech.163.com/school ...
相关推荐
代码 多种群遗传算法的函数优化算法代码代码 多种群遗传算法的函数优化算法代码代码 多种群遗传算法的函数优化算法代码代码 多种群遗传算法的函数优化算法代码代码 多种群遗传算法的函数优化算法代码代码 多种群遗传...
但是,函数指针更适合用于简单的回调函数,而函数对象更适合用于复杂的业务逻辑和算法实现。 函数指针和函数对象是C++语言中两个重要的概念,掌握它们可以帮助开发者更好地实现高级编程技术和算法实现。
这个“优化算法测试函数MATLAB代码完整版”压缩包提供了全面的资源,包括代码、数据以及算法的详细描述,旨在帮助用户理解和应用各种优化算法。 首先,MATLAB是一个强大的数学计算软件,广泛用于科学计算、图像处理...
在遗传算法中,目标函数和适应度函数扮演着至关重要的角色。 目标函数(Objective Function)是遗传算法的核心,它定义了我们想要优化的问题。目标函数可以是寻找函数的最大值或最小值,例如在工程设计中的最小化...
`Sheffield的遗传算法工具箱` 是一个专门用于实现遗传算法的MATLAB工具包,可能包含了各种遗传算法的基本操作函数和辅助工具。这个工具箱可能包括初始化种群、适应度函数计算、选择策略、交叉操作、变异操作以及终止...
"Rosenbrock函数.txt" 和 "Rosenbrock函数" 这两个文件很可能包含了关于该函数的进一步讨论、实现代码示例或者优化算法的结果分析。通过深入阅读这些文件,我们可以获取更多关于如何求解和分析Rosenbrock函数的细节...
本实验“新实验五 人工智能之遗传算法求解函数最大值”着重于如何利用遗传算法寻找给定函数的最大值。下面将详细解释遗传算法的基本原理、C#实现细节以及在Visual Studio中的应用。 1. **遗传算法概述** - 基本...
在IT领域,特别是优化算法的研究和开发中,测试函数扮演着至关重要的角色。"testfunction.rar" 是一个MATLAB编译的压缩包,包含了18个专门用于智能优化算法性能评估的测试函数程序。这些函数设计的目标是模拟复杂的...
【基于遗传算法的函数优化】是一种利用生物进化原理来解决复杂优化问题的计算方法,它在计算机科学,尤其是机器学习和人工智能领域具有广泛的应用。MATLAB作为一种强大的数值计算和编程环境,是实现遗传算法的理想...
在本项目中,"蚁群算法求函数最值"是利用蚁群算法在MATLAB编程环境中寻找一个数学函数的最小值或最大值。 MATLAB是一种广泛应用于数值计算、矩阵运算、数据可视化和算法开发的高级编程环境。在这个项目中,MATLAB被...
在IT领域,尤其是在优化算法和人工智能的研究中,测试基准函数起着至关重要的作用。"算法测试基准函数"是一组专门设计用于评估和比较不同智能算法性能的数学模型。这些函数通常具有不同的特性,如多模态、非线性、...
遗传算法优化测试函数,方便理解 ,简单通俗易懂 ,方便和其他算法对比 遗传算法优化测试函数,方便理解 ,简单通俗易懂 ,方便和其他算法对比 遗传算法优化测试函数,方便理解 ,简单通俗易懂 ,方便和其他算法对比...
黏菌优化算法黏菌优化算法黏菌优化算法测试函数 黏菌优化算法黏菌优化算法黏菌优化算法测试函数 黏菌优化算法黏菌优化算法黏菌优化算法测试函数 黏菌优化算法黏菌优化算法黏菌优化算法测试函数 黏菌优化算法黏菌优化...
Ackley函数,作为优化算法测试领域的一个重要工具,它的设计初衷是为了评估和比较不同优化算法在处理复杂优化问题时的能力。这个函数具有多模态、非线性、非凸等特性,使得它成为检验全局搜索性能的理想选择。下面将...
本程序用于基础遗传算法求解函数,样例函数为二次函数,可以根据自身需求转换函数。
优化算法测试函数其中包括Rosenbrock.m,Schaffer.m,Schewel.m,Schwefel.m,shiftedRosenbrock.m,ShiftedSphere.m,Sphere.m,step.m,SumDifferent.m,SumSquares.m,Zakharov.m,rastrigin.m,sumpow.m,perm0...
在解决函数的最大值和最小值问题时,PSO算法的基本步骤如下: 1. 初始化:首先,随机生成一定数量的粒子,它们代表解空间中的可能解,每个粒子的位置和速度被设定为随机值。 2. 计算适应度值:对于每一个粒子,...
通过学习和理解这些内容,我们可以深入掌握遗传算法如何处理函数最优化问题,并且能够将其应用到其他类型的函数或更广泛的优化问题中。此外,还可以研究如何改进遗传算法,比如采用多策略选择、动态调整参数、引入...
Griewank函数是常用的测试函数之一,用于评估和比较优化算法的性能。这个函数具有多个局部最小值,但只有一个全局最小值,位于原点(0,0,...,0),使得优化过程更具挑战性。Griewank函数的数学表达式为: \[ f(x) = \...