一、运算符重载
1、重载运算符的限制:
重载运算符函数可以对运算符作出新的解释,但原有基本语义不变:
2、重载运算符的具体格式
class X {
//…
返回类型 operator运算符(形参表);
//…
}
在类外定义成员运算符函数的格式如下:
返回类型 X::operator运算符(形参表)
{
函数体
}
3、用成员或友元函数重载运算符
①、一元运算符:
Object op 或 op Object
重载为成员函数,解释为:
Object . operator op ()
操作数由对象Object通过this指针隐含传递
重载为友元函数,解释为:
operator op (Object)
操作数由参数表的参数Object提供
②、二元运算符:
ObjectL op ObjectR
重载为成员函数,解释为:
ObjectL . operator op ( ObjectR )
左操作数由ObjectL通过this指针传递,右操作数由参数ObjectR传递
重载为友元函数,解释为:
operator op ( ObjectL, ObjectR )
左右操作数都由参数传递
4、【】()运算符使用
【】运算符用于访问数据对象的元素
重载格式 类型 类::operator[] ( 类型) ;
()运算符用于函数调用
重载格式 类型 类:: operator() ( 参数表 ) ;
*注:(1)运算符【】和()是二元运算符,只能用成员函数重载,不能用友元函数重载。
(2)重载输出(输入)运算符只能用友元函数重载。
istream& operator>>(istream& in,class_name& obj)
{
in>>obj.item1;
in>>obj.item2;
. . .
in>>obj.itemn;
return in;
}
二、STL模板库
①STL是C++标准程序库的核心,深刻影响了标准程序库的整体结构。
②STL由一些可适应不同需求的集合类(collection class),以及在这些数据集合上操作的算法(algorithm)构成
③STL内的所有组件都由模板(template)构成,其元素可以是任意类型。
④STL是所有C++编译器和所有操作系统平台都支持的一种库。
5、STL容器的共同操作
初始化
产生一个空容器
①以另一个容器元素为初值完成初始化
②以数组元素为初值完成初始化。
与大小相关的操作
size( )返回当前容器的元素数量
empty( )—判断容器是否为空
max_size( )—返回容器能容纳的最大元素数量。
比较
比较操作两端的容器必须属于同一类型
如果两个容器内的所有元素按序相等,那么这两个容器相等
采用字典式顺序判断某个容器是否小于另一个容器
赋值和交换
swap用于提高赋值操作的效率
与迭代器相关的操作
begin()—返回一个迭代器,指向第一个元
end()—返回一个迭代器,指向最后一个元素之后
rbegin()—返回一个逆向迭代器,指向逆向遍历的第一个元素
rend()—返回一个逆向迭代器,指向逆向遍历的最后一个元素之后
元素操作
insert(pos,e)—将元素e的拷贝安插于迭代器pos所指的位置
erase(beg,end)—移除【beg,end】区间内的所有元素
clear()—移除所有元素
5、迭代器
可遍历STL容器内全部或部分元素的对象
指出容器中的一个特定位置
6、容器
(1)vector
vec.begin()//指向迭代器中第一个元素。
vec.end()//指向迭代器中末端元素的下一个,指向一个不存在元素。
vec.push_back(elem) //在尾部加入一个数据。
vec.pop_back() //删除最后一个数据。
vec.capacity() //vector可用空间的大小。
vec.size()//返回容器中数据个数。
vec.empty() //判断容器是否为空。
vec.front() //传回第一个数据。
vec.back() //传回最后一个数据,不检查这个数据是否存在。
vec.at(index) //传回索引idx所指的数据,如果idx越界,抛出out_of_range。
vec.clear() //移除容器中所有数据。
vec.erase(iterator) //删除pos位置的数据,传回下一个数据的位置。
vec.erase(begin,end) //删除[beg,end)区间的数据,传回下一个数据的位置。注意:begin和end为iterator
vec.insert(position,elem) //在pos位置插入一个elem拷贝,传回新数据位置。
vec.insert(position,n,elem) //在pos位置插入n个elem数据,无返回值。
vec.insert(position,begin,end) //在pos位置插入在[beg,end)区间的数据,无返回值。
(2)map
总结:
学习了运算符重载和STL之后,使我的代码更加简洁,同时也可以更方便地解决问题。但C++的难度越来越大,也越来越难掌握,课下还需多多练习。