运算符重载和STL部分的学习总结

   在学习类的部分学习完后,我们进行了运算符重载与STL部分的学习。通过这种方式,来进行这部分的总结与复习。

一. 运算符重载

  1. 为什么要重载运算符:

    C++预定义中的运算符的操作对象只局限于基本的内置数据类型,但是对于我们自定义的类型(类)是没有办法操作的。但是大多时候我们需要对我们定义的类型进行类似的运算,这个时候就需要我们对这么运算符进行重新定义,赋予其新的功能,以满足自身的需求。 运算符重载使得用户自定义的数据以一种更简洁的方式工作。

  2.重载运算符的限制:

     重载运算符函数可以对运算符做出新的解释,但原有基本语义不变:

                                                    1.不改变运算符的优先级

                                                    2.不改变运算符的结合性

                                                    3.不改变运算符所需要的操作数

                                                    4.不能创建新的运算符

  3.运算符函数可以重载为成员函数或者友元函数。

      两者区别:

     对双目运算符而言,成员运算符函数的形参表中仅有一个参数,它作为运算符的右操作数,此时当前对象(然后友元函数却不能这样)作为运算符的左操作数,它是通过this指针隐含地传递给函数的。

   对单目运算符而言,成员运算符函数的参数表中没有参数,此时当前对象作为运算符的一个操作数。 

  4.两者比较:(1.)成员运算符函数比友元运算符函数少带一个参数

                      (2.)双目运算符一般可以被重载为友元运算符函数或成员运算符函数,但当操作数类型不同时,必须使用友元函数。


  5.几种特殊情况:

           (1.)运算符【】和()是二元运算符,只能用成员函数重载,不能用友元函数重载。

           (2.)重载输出(输入)运算符只能用友元函数重载。

  6.友元函数重载输出(输入)运算符:

           (1.)istream和ostream是C++的预定义流类。

           (2.)cin是istream的对象,cout是ostream的对象。

           (3.)运算符<<由ostream重载为插入操作,用于输出基本类型数据

           (4.)运算符>>由istream重载为提取操作,用于输入基本类型数据。

   定义输出运算符“<<”重载函数的一般格式如下:

         

ostream& operator<<(ostream& out,class_name& obj)
{  
   out<<obj.item1;
   out<<obj.item2;
   ...
   out<<obj.itemn;
   return out;
     }

 定义输入运算符“>>”重载运算符的一般格式如下:

  

istream& operator>>(istream& in,class_name&obj)
{  
    in>>obj.item1;
    ...
    in>>obj.itemn;
    return in;
     }

二.STL

   1.  STL简介

        (1. )STL是C++标准程序库的核心,深刻影响了标准程序库的整体结构。

      (2.)STL由一些可适应不同需求的集合类(collection class),以及在这些数据集合上操作的算法(algorithm)构成

        (3.)STL内的所有组件都由模板(template)构成,其元素可以是任意类型。

        (4.)STL是所有C++编译器和所有操作系统平台都支持的一种库

   2.STL组件

        容器(Container)——管理某类对象的集合

        迭代器(Iterator)——在对象集合上进行遍历

        算法(Algorithm)——处理集合内的元素

        容器适配器(container adaptor)

        函数对象(functor)

   3.STL容器类别

        (1.)序列式容器——排列次序取决于时机和位置

        (2.)关联式容器——排列顺序取决于特定准则

     STL容器的共同能力:

         所有容器中存放的都是值而非引用。如果希望存放的不是副本,容器元素只能是指针。

         所有元素都形成一个次序(order),可以按相同的次序一次或多次遍历每个元素。

    STL容器元素的条件:

         必须能够通过拷贝构造函数进行复制

         必须可以通过赋值运算符完成赋值操作

         必须可以通过析构函数完成销毁动作

         序列式容器元素的默认构造函数必须可用

         某些动作必须定义operator =,例如搜寻操作

         关联式容器必须定义出排序准则,默认情况是重载operator <(对于基本数据类型(int,long,char,double,……)而言,以上条件总是满足)

   4.STL容器的共同操作:

              初始化:

                         产生一个空容器

                                           1.以另一个容器元素为初值完成初始化

                                           2.以数组元素为初值完成初始化。

              与大小相关的操作:

                         size( )返回当前容器的元素数量

                         empty( )—判断容器是否为空

                         max_size( )—返回容器能容纳的最大元素数量。

              比较

                        比较操作两端的容器必须属于同一类型

                        如果两个容器内的所有元素按序相等,那么这两个容器相等

                        采用字典式顺序判断某个容器是否小于另一个容器

              赋值和交换

                        swap用于提高赋值操作的效率

              与迭代器相关的操作

                        begin()—返回一个迭代器,指向第一个元素

                        end()—返回一个迭代器,指向最后一个元素之后

                        rbegin()—返回一个逆向迭代器,指向逆向遍历的第一个元素

                        rend()—返回一个逆向迭代器,指向逆向遍历的最后一个元素之后

              元素操作

                        insert(pos,e)—将元素e的拷贝安插于迭代器pos所指的位置

                        erase(beg,end)—移除【beg,end】区间内的所有元素

                        clear()—移除所有元素

   5.迭代器

            可遍历STL容器内全部或部分元素的对象

            指出容器中的一个特定位置

   6.容器:

           经过学习了解到了:vector、map/multimap、set/multiset

还了解学习了一小部分算法问题,在这里不做详细总结。  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值