• STL之阶段总结、大作业指导


    1、局部变量---全局变量---成员变量----new建立变量(对象)

    #include
    using namespace std;


    char * get_string()
    {
        char *str="hello,lisi";            //字符串常量,直到程序退出时,才会消失-----类似于全局常量
        return str;
    }


    int main()
    {
        char *str1=get_string();
        cout<     return 0;
    }


    //
    #include
    #include
    using namespace std;


    string get_string()
    {
        string str="hello,lisi";
        return str;       //返回的是 复制品
    }                    //该函数退出后,真品str 就 消失了


    int main()
    {
        string str1=get_string();    //main函数在真品消失前,得到了复制品,因此,get_string()函数结束了,main函数仍然能打印出复制品的内容
        cout<     return 0;
    }

    ///
    #include
    #include
    using namespace std;


    string* get_string()
    {
        //string str="hello,lisi";                //使用该语句,str对象在本函数结束时,会自动消失;return返回的是,马上要消失的对象 的 地址
        string *pstr=new string("hello,lisi");    //解决办法1:使用new来建立对象
        return pstr;                            //
    }


    int main()
    {
        string* str1=get_string();
        //delete str1;
        cout<<*str1<

        return 0;
    }

    ///
    局部变量------>要改为 成员变量的例子
    //main.cpp
    #include
    #include
    using namespace std;

    int main()
    {
        CManage manage;
        manage.add_student();
        manage.add_student();
        manage.print_student_all();    
        return 0;
    }


    //Manage.h
    class CManage  
    {
        vector vec1;
    public:
        CManage();
        virtual ~CManage();
        void add_student();
    };


    //Manage.cpp
    void CManage::add_student()
    {    
        CStudent stu(1001,"zhangsan");        //stu使用局部变量 是 合适的,因为,下面要把它的复制品放到容器中,真品能自动消失,很好啊!
        //vector vec1;            //vec1如果为局部变量,本函数结束时,它就消失了,不应该啊!----所以考虑使用new或成员变量来代替----用new很显然不对,所以要用成员变量
        vec1.push_back(stu);                //因为vec1为成员变量,所以,manage对象建立时,vec1就已经建立好了;在此次,可以直接使用,即调用它的push_back成员函数
        return ;
    }


    2、回调函数

    语法:------只是熟悉了语法,没有实用价值
    #include
    #include
    using namespace std;

    typedef int (*pfun)(int a,int b);    //定义了1个新的数据类型 pfun-----它叫函数指针类型--------由它定义的变量 肯定是 函数名------而且该函数的原型是严格要求的


    int max(int a,int b)        //根据函数指针类型pfun,定义的函数原型
    {
        int result=a>b?a:b;
        return result;
    }

    int main()
    {

        /*
        int a=100;
        int b=20;
        int result=max(a,b);
        cout<

        pfun fun1;                    //定义了 函数指针变量fun1
        fun1=max;                    //max函数原型,符合pfun的要求,所以max可以赋给变量 fun1
        int result2=fun1(2000,300);   //fun1是变量,但此时相当于max函数名了
        cout<<"result2 is "<     return 0;
    }


    回调函数的应用场合:------几乎都在 遍历函数中 使用 函数指针变量(函数名)
    -------具有实用价值的回调函数 用法:

    #include
    #include
    using namespace std;

    typedef void (*pfun)(int *context,int data);   //pfun是函数指针类型。这是回调函数的通常格式:context是reslut的地址,data是某个数组元素的值

    void sum(int *context,int data)
    {
        
        *context=*context+data;        //相当于 result=result+array[i]    元素累加求和,由于context是地址变量,因此可以修改调用者的result
        return ;
    }

    void max(int *context,int data)
    {
        
        if(*context     {
            *context=data;      //相当   result=array[i]     将最大的元素值 赋值给result。由于context是地址变量,因此可以修改调用者的result
        }
        return ;
    }


    int foreach(int array1[],int count,pfun fun)
    {
        int result=0;
        for(int i=0;i     {
            fun(&result,array1[i]);
        }

        return result;
    }

    int main()
    {
        int array1[]={10,6,12,4,3};
        int result=foreach(array1,5,max);
        cout<

        int result_sum=foreach(array1,5,sum);
        cout<<"sum is "<

        return 0;
    }


     

  • 相关阅读:
    从零开始学GNN
    怎么把两个PDF合并成一个?建议收藏这些合并的方法
    C#实现线性查找算法
    软件开发工具总结篇
    Rust的面向对象特性
    【Git总结大全】git操作从入门到实战(总结篇)
    嵌入式工程师面试知识总结
    Java入门-Java语言概述
    Kylin服务器版本桌面版本在接串口日志时出现问题的排查方向
    Spring boot会了吗?Spring boot实战文档赶紧学习起来
  • 原文地址:https://blog.csdn.net/zzjlhlcd/article/details/127711993