在学习类的部分学习完后,我们进行了运算符重载与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
还了解学习了一小部分算法问题,在这里不做详细总结。