函数指针除了进行参数传递外,还承接申请的存储空间、释放空间等。而函数指针则主要是用来进行参数传递的,就像引用一样。

例如,我们来看一下函数指针的传递工作。在标准排序算法sort中,对于所提的整数容器vector,无须提供其他操作就可以顺利完成排序任务。代码如下:

 int a[] = {,,,,,,,};
vector<int> aa(a,a+);
sort(aa.begin(),aa.end());

但若整数的大小是以各位数字之和的大小来确定的,则就不能直接使用sort标准函数来排序。需要先定义一个比较函数,然后再对sort传递比较函数指针,以让sort知道大小关系不是默认的整数值比较,而是根据比较函数来判定。可用函数指针调取比较函数,来进行排序工作。代码如下:

 #include<iostream>
#include<algorithm>
#include<vector>
using namespace std; int bitSum(int a);
bool lessThanBitSum(int a, int b){ return bitSum(a) < bitSum(b); }; int main()
{
int a[] = { , , , , , , , };
vector<int> aa(a, a + );
sort(aa.begin(), aa.end(),lessThanBitSum);
for (int i = ; i < aa.size(); ++i)
cout << aa[i] << " ";
cout << "\n";
}
int bitSum(int a)
{
int sum = ;
for (int x = a; x; x /= ) sum += x % ;
return sum;
}

第13行的sort调用,其第三个实参为比较函数名lessThanBitSum,函数名即为函数指针,正像数组名即为指针一样。sort的形参为一个相对应的函数指针,正像数组传递中,形参为对应的指针那样。

标准排序算法的使用,依赖于容器中元素类型的小于“<”操作,如果排序的容器中是整数元素,那么,小于“<”的比较判断函数可以省略。因为整数的大小比较操作在C++中本来就具备。否则,sort函数的调用还必须提供第三个参数——指针函数。其参数类型为某个元素类型T的bool(const T&,const T&)。

最新文章

  1. .NET面试题系列[8] - 泛型
  2. angular2系列教程(三)components
  3. .net 将List序列化成Json字符串
  4. [MAVEN]一、maven入门之软件的下载及配置到Eclipse中
  5. cell嵌套UIWebView遇到的几个问题
  6. [js开源组件开发]ajax分页组件
  7. php缓冲区 sapi缓冲区
  8. forward:hello 与 redirect:hello的区别
  9. android 利用反射机制获取drawable中所有的图片资源
  10. centos 6 编译安装httpd-2.4
  11. C#关于HttpClient的应用(二):极光推送IM集成
  12. Oracle客户端、服务的安装及干净卸载Oracle
  13. MyBatis之分页插件(PageHelper)工作原理
  14. Unity3d项目入门之虚拟摇杆
  15. PLSQL设置细节
  16. 别人的Linux私房菜(10)vim程序编辑器
  17. (网页)web性能优化(转)
  18. Caffe使用step by step:caffe框架下的基本操作和分析
  19. 如何禁止VS显示“You have mixed tabs and spaces. Fix this?”
  20. 【python基础】hmac

热门文章

  1. IDEA下搜狗输入法输入中文时卡着不动的参考解决方法
  2. grafana-zabbix部署和使用
  3. 面向对象【day07】:多态(九)
  4. 如何解决win7系统无法运行cmd命令提示符
  5. JVM调优命令-jstack
  6. ADB not responding
  7. 最新Linux系统Ubuntu16.04搭建HUSTOJ(LAMP环境)
  8. 第16月第24天 find iconv sublime utf-8
  9. HDU 2522 A simple problem (模拟)
  10. latex 字体大小设置