C++结构体中的技巧,重载,创建等。

1.结构体运算符的重载(用于优先队列排序,矩阵运算等)。

struct node{
    int a,b;
    bool operator < (const node tmp) const{
        return tmp.a>a;
    }
};

  重载了"<"运算符,优先队列默认按照大的在前排列。这个意思就是进来一个结构体tmp,它的a元素大所以它就在前面。

  重载还可用于矩阵运算,如:

struct matrix{
    ll dx[maxn][maxn];
    matrix(){
        memset(dx,0,sizeof(dx));
    }
    matrix friend operator * (matrix n1,matrix n2){
        matrix n3;
        for(int i=0;i<=len;i++){
            for(int j=0;j<=len;j++){
                for(int k=0;k<=len;k++){
                    n3.dx[i][j]+=n1.dx[i][k]*n2.dx[k][j];
                    n3.dx[i][j]%=mod;
                }
            }
        }return n3;
    }
}

  重载了乘法,那么两个结构体的矩阵之间可以直接进行运算,并返回一个同类型的矩阵n3。

  其实也可以写一个矩阵乘法的函数,也很方便。

2.结构体的创建:

  小白时期我们创建结构体往往是这样的:

node tmp;
tmp.a=xx;
tmp.b=yy;

  但是其实可以这样:   

node{xx,yy};    //创建一个Node类型的数据,并按顺序进行赋值。

  更详细一点:

struct node{
    int a,b;
    node(){};    //默认构造函数
    node(int a,int b):a(a),b(b){}   //对应两个参数的构造函数
}

  记得曾经写链表自己一直在用Malloc函数,一堆参数的朝里面放,费时且费心,这个技巧更灵活。

3.博主在尝试写公众号推送,如果您有什么批评建议的的,欢迎留言。

 

 


版权声明:本文为weixin_41033366原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。