zoukankan      html  css  js  c++  java
  • 【STL】重载运算符

    重载运算符

    为什么要重载运算符:
    C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如结构体),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。
    什么是重载运算符:
    简单来说:运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。
    如何实现:
    运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运算符将要进行的操作。运算符函数的定义与其他函数的定义类似,惟一的区别是运算符函数的函数名是由关键字operator和其后要重载的运算符符号构成的。
    运算符重载为类的成员函数的一般格式为:
    <函数类型> operator <运算符>(<参数表>)const
    {
    <函数体>
    }

    以重载“<”运算符为例:

    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int maxn=100;
    struct node//定义结构体
    {
        int a;
        int b;
        bool operator < (node tmp)const//重载运算符函数
        {
            if(a==tmp.a)
            return b<tmp.b;//注意运算符的开口方向,此处为按照b的升序排序(从小到大)
            return a>tmp.a;//按照a的降序排序(从大到小)
        }
    }e[maxn];
    int n;
    int main()
    {
        cin>>n;
        for(int i=1;i<=n;i++)
        cin>>e[i].a>>e[i].b;
        sort(e+1,e+n+1);//排序,因为已经重载了运算符,所以不用再写比较函数
        for(int i=1;i<=n;i++)
        cout<<e[i].a<<" ";
        return 0;
    }

    不使用重载运算符:

    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int maxn=100;
    struct node
    {
        int a;
        int b;
    }e[maxn];
    int n;
    bool cmp(node x,node y)//排序函数
    {
        if(x.a==y.a)
        return x.b<y.b;
        return x.a>y.a;
    }
    int main()
    {
        cin>>n;
        for(int i=1;i<=n;i++)
        cin>>e[i].a>>e[i].b;
        sort(e+1,e+n+1,cmp);//需要写一个排序函数cmp
        for(int i=1;i<=n;i++)
        cout<<e[i].a<<" ";
        return 0;
    }
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    HDU 5640 King's Cake
    HDU 5615 Jam's math problem
    HDU 5610 Baby Ming and Weight lifting
    WHU1604 Play Apple 简单博弈
    HDU 1551 Cable master 二分
    CodeForces659C Tanya and Toys map
    Codeforces 960E 树dp
    gym 101485E 二分匹配
    Codeforces 961E 树状数组,思维
    Codeforces Round #473 (Div. 2) D 数学,贪心 F 线性基,模板
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/6057017.html
Copyright © 2011-2022 走看看