当前位置 博文首页 > 我爱编程:c++和c的区别-1

    我爱编程:c++和c的区别-1

    作者:[db:作者] 时间:2021-07-02 15:30

    C++比C新加的特性(第一部分)

    1. sort函数

    sort定义在algorithm头文件里,它是一个模板

    #include<bits/stdtr1c++.h>
    using namespace std;
    int main(){
        int a[]={5,4,3,2,1};
        sort(a,a+5);//传入排序需要排的左指针和右指针,默认是从小到大来排序
        for(int i=0;i<5;i++){
            cout<<a[i]<<" ";
        }
        cout<<endl;
        // 输出:1 2 3 4 5<\n>
        return 0;
    }
    
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    //sort排序的自定义比较函数
    int cmp(int x,int y){
        return x>y;//从大到小来排序
    }
    int main(){
        int a[]={1,2,3,4,5};
        sort(a,a+5,cmp);//sort函数 变成了这个东东
        for(int i =0;i<5;i++){
            cout<<a[i]<<" ";
        }
        //输出:5 4 3 2 1
        return 0;
    }
    
    • greater<element_type>()从大到小排序
    • less<element_type>()从小到大排序
    • greater_equal大到小,等于不交换
    • less_equal小到大,等于不交换
    • 都定义在iostream

    结构体的排序

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    struct  node{
        int  x,y;
    };
    int main(){
        node a[3];
        a[0].x=1;
        a[0].y=2;
        a[1].x=2;
        a[1].y=1;
        a[2].x=3;
        a[2].y=0;
        sort(a,a+3);//这样编译过不了,因为不知道如何比较
        sort(a,a+3,cmp);//方案1
        for(int i=0;i<3;i++){
            printf("%d %d\n",a[i].x,a[i].y);
        }
        return  0;
    }
    
    解决方案1.函数;
    int cmp(node a,node b){
        return a.x<b.x;//按照 x从小到大来排序
    }
    解决方案2.pair(pair提供了比较函数,但是不知道 按照什么排序)
    解决方案3.重载运算符 
    

    2. 结构体的升级

    1.结构体里定义函数

    struct node{
        int x,y;
        void input()//直接调用即可,在结构体里面可以把x和y看做全局变量
        {
            scanf("%d%d",&x,&y);
            out();//结构体里的成员他是没有先后次序的。
        }
        void output(){
            printf("x=%d y=%d\n",x,y);
        }
    }
    int main(){
        node a;
        a.input();
        return 0;
    }
    

    这个程序是无限循环的

    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    #include <cstdio>
    using namespace std;
    struct spin{
    	int x,y;
    	void f(){
    		puts("This is the function f().");
    		g();
    	}
    	void g(){
    		puts("This is the function g().");
    		f();
    	}
    };
    int main()
    {
    	spin x;
    	x.f();
    	return 0;
    }
    
    

    重载函数

    void fun(int x,int y){
        cout<<x<<' '<<y<<"hello"<<endl;
    }
    void fun(int  x){
        cout<<"world"<<x<<endl;
    }
    int main(void){
        fun(1);//调用fun(int,int)
        fun(1,2);//调用fun(int)
        //注意:函数的参数的个数 不能一样!(哪怕不是一个类型的)
        return 0;
    }
    

    运算符重载

    #include<iostream>
    #include<cstdio>
    #include<algorithm> 
    using namespace std;
    struct no{
        int x,y;
        bool operator<(const no&cmp)const{
            return x<cmp.x;
        }//这就是刚刚写的运算符重载,sort也可以用
    };
    int main(){
        no n[]={1,4,2,3};
        sort(n,n+4);//编译通过!
        for(no x:n){//C++的另一个知识:枚举每一个数组里的元素可以這麼枚举 
            cout<<x.x<<' ';
        }
        cout<<endl;
        return 0;
    }
    

    结构体外的重载运算符

    no operator+(no a,no b){
        no t;
        t.x=a.x+b.x;
        t.y=a.y+b.y;
        return t;
    }
    int main(){
        node a,b,c;
        a.in();
        b.in();
        c=a+b;
        c.out();//自己写in和out函数
        return 0;
    }
    

    当然,cin的>>,cout的<<,都可以重载,但是没有意义,还会导致一些神奇 的错误,就看你愿不愿弄!

    C++11可以重载的运算符表

    img

    2. 类

    和struct基本相似,但是有public,private,protected三种状态

    cs
    下一篇:没有了