运算符重载与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<<"("<
总结 :运算符的重载在c++中非常的好用。运算符的重载通过自己定义函数实现,通过运算符重载可以让+ - * / >> <<等运算符能够直接在我们自己定义的类对象中使用,让类和对象的应用更加的灵活方便。


STL c++标准模板库

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

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

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

vector:

int main(){
    vector 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 mm1;  //产生新的multimap
    multimap::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中还有很多方便实用的函数,多了解一下在程序中调用可以简化工作提高高效率。

你可能感兴趣的:(运算符重载与STL)