重载运算符和stl总结



一丶重载运算符

1.用成员函数重载运算符
class x{

//...

返回类型 operator 运算符(形参表);

};

返回类型 X:operator 运算符(形参表)

{

     函数体;

}
或者改写的更简练一些。

Complex Complex::operator+(Complex &c2)

{   return Complex(real+c2.real,image+c2.image);}
2.对运算符重载的函数有两种处理方式
(1)把运算符重载的函数作为类的成员函数;
(2)运算符重载的函数不是类的成员函数,在类中把它声明为友元函数。
注意!
重载运算符后,不改变其原来的功能
不改变运算符的优先级
不改变运算符的结合性
 不改变运算符所需要的操作数
不能创建新的运算符
运算符函数可以重载为成员函数或友元函数

●一元运算符

  Object op    或    op Object

Ø  重载为成员函数,解释为:

      Object . operator op()

      操作数由对象Object通过this指针隐含传递

Ø重载为友元函数,解释为:

      operator op (Object)

    操作数由参数表的参数Object提供

●二元运算符

Ø  重载为成员函数,解释为:

      ObjectL . operatorop ( ObjectR )

    左操作数由ObjectL通过this指针传递,右操作数由参数ObjectR传递

Ø重载为友元函数,解释为:

      operator op (ObjectL, ObjectR )

    左右操作数都由参数传递
二丶STL
1.vector

vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。为了可以使用vector,必须在你的头文件中包含下面的代码:#include <vector>构造函数。

用法

vector<T>c 产生空的vector.

vector<T>c1(c2) 产生同类型的才,并复制c2的所有元素。

vector<T>c(n)生成容器为n的vector。

vector<T>c(beg,end)产生一个vector以区间[beg,end]为元素初值、

~vector<T>()销毁所有元素,并释放内存。

c.size()返回元素个数。

c.empty() 判断元素是否为空。

c.max_size() 返回元素最大可能数量。

c.capacity()返回重新分配空间前可容纳的最大元素数量。

c.reserve(n)  扩大容量n。

c1==c2  判断C1是否等于c2.

c1=c2  将c2的全部元素赋值给c1.

c.assign(beg,end) 将区间[beg,end]的元素赋值给c。

c1.swap(c2)将c1和c2 元素互换。

swap(c1,c2) 同上。

at(idx) 返回索引idx所标识的元素的引用。进行越界检查

operator[](idx) 返回索引idx所标识的元素的引用。不进行越界检查

front() 返回第一个元素的引用,不检查元素是否存在。

back()返回最后一个元素的引用,不检查元素是否存在。

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

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

c.insert(pos,e) 在pos位置插入元素e的副本,并返回新元素的位置。

c.insert(pos,n,e) 在pos位置n个元素e的副本。

c.insert(pos,ben,end)在pos位置插入区间[beg,end)内所有元素的副本。

c.push_back()   在尾部添加一个元素e的副本。

c.pop_back() 移除最后一个元素但不返回最后一个元素。

c.erase(pos) 删除pos元素的位置,返回下一个元素的位置。

c.clear()移除所有元素,清空容器。

c.resize(num)  将元素数量改为num(增加函数用defalut构造函数的产生,多余元素被删除。

c.resize(num,e) 将元素数量改为num(增加元素是e的副本)

三丶心得

在我看来,运算符重载是很重要的,很有实用意义,丰富了类的功能和适用范围,重载时一般都是基于原来的功能进行延伸不能太违背原来的意思,重载一次一劳永逸,为下面节省很多,而且使程序更清晰。
STL 使是以模板为基础的一个标准库,使c++的重要的一部分。它非常有实用性,运用STL能使代码更简洁。我们要对STL各种容器及其特有的一些功能都要了解,用的时候也便于查找。
但是,STL听大佬说在编写时很方便,实际运用上我并不能很好掌握,甚至说不怎么会用容器。这方面还需要多去理解和练习。







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章