运算符重载与STL

什么是运算符重载

运算符重载就是根据自己的需要对c++以提供的运算符进行重载赋予他们新的含义。比如可以通过重载加号来实现复数的相加。

重载运算符的方法:函数类型 operator 运算符名称 (形参){对运算符进行的处理}

重载“+”来实现复数的相加:

Complex operator+(Complex &c2)          //重载函数作为成员函数
    {
        Complex c;
        c.real=real+c2.real;
        c.imag=imag+c2.imag;
        return c;

    }

重载运算符的规则:

不能定义新的运算符只能对已有的运算符进行重载。

不能重载的运算符:.     .*    ::     sizeof     ?:     

重载运算符可以定义为成员函数或友元函数:

当运算符函数需要访问类对象的成员时就需要定义为友元函数,不然无法访问类的私有成员。

class Complex
{
private:
    double real,imag;
public:
    Complex(){real=0;imag=0;}
    Complex(double r,double i){real=r;imag=i;}
    friend Complex operator+(Complex &c1,Complex &c2);           //重载运算符作为友元函数
};
Complex operator+(Complex &c1,Complex &c2)
{
    return Complex(c1.real+c2.real,c1.imag+c2.imag);

}

重载输入输出运算符:只能将重载输入输出的函数定义为友元函数而不能定义为成员函数。

class Complex

{
private:     .............
public:      .............
    friend ostream &operator<<(ostream &out,Complex &u);         //重载输出运算符
};
ostream &operator<<(ostream &out,Complex &u)
{
    out<<"("<<u.real<<","<<u.imag<<"i)"<<endl;
}
总结 :运算符的重载在c++中非常的好用。运算符的重载通过自己定义函数实现,通过运算符重载可以让+ - * / >> <<等运算符能够直接在我们自己定义的类对象中使用,让类和对象的应用更加的灵活方便。


STL c++标准模板库

STL就是c++已经定义好了的一些很好用的类的集合,让我们可以直接拿过来用不用再自己去定义,非常的方便。

STL主要由容器、迭代器、和算法组成。容器就是用来存放类对象数据,迭代器就是用来在容器里遍历所有的类对象数据找到一个需要的位置,算法就是用来对数据进行操作来实现需要的功能。

现在我们常用的是vector容器和map/mul'timap容器

vector:

int main(){
    vector<int> a;  //产生空的vector
    for (int i = 0; i < 5; ++i){
        a.push_back(5 - i);   //在最后增加一个元素          
    }
    cout << "Size: " << a.size() << endl;    //返回元素的个数
    a.pop_back();//移除最后一个元素但不返回最后一个元素
    a[0] = 1;

    cout << "Size: " << a.size() << endl;     //返回元素的个数
    for (int i = 0; i < (int)a.size(); ++i){   //返回元素的个数
        cout << a[i] << ", " << endl;
    }
    cout << endl;

    sort(a.begin(), a.end());     //指向第一个元素   指向最后一个元素之后
    cout << "Size: " << a.size() << endl;
    for (int i = 0; i < (int)a.size(); ++i){
        cout << a[i] << ", " << endl;
    }
    cout << endl;

    a.clear();   //清除所有元素清空容器
    cout << "Size: " << a.size() << endl;
    return 0;
}

map/multimap

int main(){
    multimap<string, int> mm1;  //产生新的multimap
    multimap<string, int>::iterator mm1i, p1, p2;
    mm1.insert(make_pair("b", 3));  //插入元素
    mm1.insert(make_pair("a", 0));
    mm1.insert(make_pair("b", 5));
    mm1.insert(make_pair("c", 4));
    mm1.insert(make_pair("b", 2));
    cout << "Size: " << mm1.size() << endl;   //返回元素的个数
    for(mm1i = mm1.begin(); mm1i != mm1.end(); mm1i++){    //指向以第个元素    指向最后一个元素之后
        cout << mm1i->first << ": " << mm1i->second << endl;
    }

    cout << "COUNT: " << mm1.count("b") << endl;     //返回数值等于b的元素的个数
    cout << "Bound: " << endl;
    p1 = mm1.lower_bound("b");    //返回数值大于等于b的第一个元素
    p2 = mm1.upper_bound("b");    //返回数值大于b的第一个元素
    for(mm1i = p1; mm1i != p2; mm1i++){
        cout << mm1i->first << ": " << mm1i->second << endl;
    }

    return 0;
}
总结:STL中是一个非常好用的工具,在STL中还有很多方便实用的函数,多了解一下在程序中调用可以简化工作提高高效率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值