zoukankan      html  css  js  c++  java
  • C++ code:函数指针参数

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

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

    1 int a[] = {33,61,12,19,14,71,78,59};
    2 vector<int> aa(a,a+8);
    3 sort(aa.begin(),aa.end());

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

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<vector>
     4 using namespace std;
     5 
     6 int bitSum(int a);
     7 bool lessThanBitSum(int a, int b){ return bitSum(a) < bitSum(b); };
     8 
     9 int main()
    10 {
    11     int a[] = { 33, 61, 12, 19, 14, 71, 78, 59 };
    12     vector<int> aa(a, a + 8);
    13     sort(aa.begin(), aa.end(),lessThanBitSum);
    14     for (int i = 0; i < aa.size(); ++i)
    15         cout << aa[i] << " ";
    16     cout << "
    ";
    17 }
    18 int bitSum(int a)
    19 {
    20     int sum = 0;
    21     for (int x = a; x; x /= 10) sum += x % 10;
    22     return sum;
    23 }

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

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

  • 相关阅读:
    面试题:增强一个对象的方法的三种方式
    Spring笔记01_下载_概述_监听器
    mybatis笔记02
    mybatis笔记01
    muduo学习笔记(二)Reactor关键结构
    Muduo学习笔记(一) 什么都不做的EventLoop
    一个linux下简单的纯C++实现Http请求类(GET,POST,上传,下载)
    一个轻巧高效的多线程c++stream风格异步日志(二)
    一个轻巧高效的多线程c++stream风格异步日志(一)
    C++智能指针,指针容器原理及简单实现(auto_ptr,scoped_ptr,ptr_vector).
  • 原文地址:https://www.cnblogs.com/ariel-dreamland/p/9081338.html
Copyright © 2011-2022 走看看