• 函数指针的用途


    1、给结构体排序

    // 函数指针的用途。譬如:给结构体排序
    struct User
    {
        const char* name;
        int numb;
    };
    
    typedef int CFT (const void*, const void*);// 函数指针类型的定义
    
    void ssort(void* base, int n, int sz, CFT comp)
    /*
     对向量base的元素进行递增排序
     n是base的元素个数
     sz是元素的大小,即sizeof(base[0])
     comp是比较函数
    
     shell排序
    */
    {
        for(int gap = n/2; gap>0; gap /= 2)
        {
            for(int i=gap; i<n; ++i)
            {
                for(int j=i-gap; 0<=j; j-=gap)
                {
                    char* b = static_cast<char*>(base);// 必须强制转换
                    char* pj = b + j*sz;        // &base[j]
                    char* pjg = b + (j+gap)*sz;  // &base[j+gap]
                    if(comp(pjg,pj)<0)   //若 base[j+gap] < base[j]; 则交换两者
                    {
                        for(int k=0; k<sz; ++k)
                        {
                            char temp = pj[k];
                            pj[k] = pjg[k];
                            pjg[k] = temp;
                        }
                    }
                }
            }
        }
    }
    
    int comp1(const void* p,const void* q) // 比较name
    {
        return strcmp(static_cast<const User*>(p)->name, static_cast<const User*>(q)->name);
    }
    
    int comp2(const void* p,const void* q) // 比较numb
    {
        return static_cast<const User*>(p)->numb - static_cast<const User*>(q)->numb;
    }
    
    int main()
    {
        User v[] = {
            "wang", 100,
            "Lee", 101,
            "lee", 102,
            "allen", 99,
            };
        ssort(v,sizeof(v)/sizeof(v[0]),sizeof(v[0]),comp1);
        for(size_t i=0; i<sizeof(v)/sizeof(v[0]); ++i)
        {
            cout << v[i].name << " " << v[i].numb << endl;
        }
        cout << "-----------------
    ";
        ssort(v,sizeof(v)/sizeof(v[0]),sizeof(v[0]),comp2);
        for(size_t i=0; i<sizeof(v)/sizeof(v[0]); ++i)
        {
            cout << v[i].name << " " << v[i].numb << endl;
        }
       return 0;
    }

    常记溪亭日暮,沉醉不知归路。兴尽晚回舟,误入藕花深处。争渡,争渡,惊起一滩鸥鹭。

    昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否?知否?应是绿肥红瘦。
  • 相关阅读:
    easy Html5 Jquery Mobile之ToolBars(Header and Footer)
    Windows Phone7 性能
    easy Html5 Jquery Mobile之Buttons
    开篇,从这里开始。
    SkyDrive APIs——用户登录和APP授权(2)
    Windows Phone的强大语音控制,让你的Phone大秀一把
    SkyDrive APIs之——操作文件和文件夹(3)
    Mango in my mind 之 Live Tile
    SkyDrive APIs——搭建环境(1)
    windows10安装redis
  • 原文地址:https://www.cnblogs.com/htj10/p/10008694.html
Copyright © 2020-2023  润新知