重载运算符及STL使用体会

重载运算符

好处:使用用户自定义数据以一种更简洁的方式工作(套话 套话)

在我看来重载运算符为的是让原本的一系列运算符+-*=()等,在自定义类中可以使用,来更方便的编写程序。

首先我们先了解一下不能重载的运算符

.   ::   ?:   .*   sizeof                                     //很不可思议的是sizeof竟然是运算符


然后还是来看一下重载运算符的实例

单目运算符(以Time为例)

//重载++
//前置
Time::operator++()
{
sec++;
if(sec>=60)
{sec=0;minute++;}
return *this;
}
//后置
Time::operator++(int)   //此处为虚参数
{
Time temp(*this);    //创建temp
sec++;
if(sec>=60)
{sec-=60;
 ++minute;
}
return temp;      //注意返回的是之前的值
}

双目运算符重载(+)

class m_complex
{
public:
	m_complex(){real=0;imag=0;}
	m_complex(double r,double i){real=r;imag=i;}
	m_complex(m_complex const &c1){real=c1.real;imag=c1.imag;}
	friend m_complex operator+(m_complex &c1,m_complex &c2);
	void display(){cout<<real<<" "<<imag;}
private:
	double real;
	double imag;
};
m_complex operator+(m_complex &c1,m_complex &c2)
{
	return m_complex(c1.real+c2.real,c1.imag+c2.imag);
}
int main()
{
	m_complex c1(2,1),c2(3,2),c3;
	c3=c1+c2;
	c3.display();

}

这两种重载一个使用了友元函数一个使用了成员函数。

友元函数重载两边可以是不同类型数据,而成员函数第一个数据必须是当前类对象。

所以说重载输出<<用友元函数重载

friend ostream& operator<<(ostream &os,m_complex &c1);
ostream& operator<<(ostream &os,m_complex &c1)
{
	os<<c1.real<<" "<<c1.imag;
}

这些重载运算符大大方便了我们的代码编译工作。

tip:大于小于比较一般重载一个就行,使用map的时候要有能让map能排序的方案 。



STL模板

STL模板是C++自带的一些好用的类 ,比如说vector,map,multimap,set,multiset等

STL模板有三大部分,一是容器,二是迭代器,三是算法。

容器就是放数据的,此时放数据有一定规律,规则。

迭代器相当于指针,指向容器中放的数据,可以遍历容器中所有数据。

算法就是各种解决问题的高效方案。

现阶段我们常用容器一般是vector,multimap

容器的申请一般需要指明容器内存放的数据类型(分配空间)

#include<vector>
using namespace std;
int main()
{
  vector<int> v1;
  vector<int>::iterator it;    //用法基本与数组一致
  v1.push_back(int);    //压入数据
  for(it=v1.begin();it!=v1.end();v1++)    //循环遍历
}
#include<multimap>
using namespace std;
int main()
{
  multimap<string,int> m1;    //前面的为关键字,后面为存储数据,调用first,second
  multimap<string,int>::iterator it;
  m1.insert(make_pair(string,int));    //这样充入数据
  for(it=m1.begin();it!=m1.end();it++)
  cout<<m1->first;    //输出关键字是有一定顺序的
}

这些容器中还有许多函数,用的时候需要自行查阅。


STL模板中的各种容器都非常好用,工作效率高,调用方便,应该在我们的代码中多使用。

猜你喜欢

转载自blog.csdn.net/akz_lz/article/details/80422047