#include <iostream>
#include <string>
using std::cout;
using std::endl;
using std::string;
namespace std2{
template <class _T1,class _T2>
struct pair
{
//两个成员
_T1 first;
_T2 second;
//无参构造函数(均调用两成员的默认构造函数初始化)
pair()
:first(),second(){}
//有参构造函数
pair(const _T1& x,const _T2& y)
:first(x),second(y){}
//拷贝构造函数
template <class _U1,class _U2>
pair(const pair<_U1,_U2>& __p)
:first(__p.first),second(__p.second){}
//赋值运算符
template <class _U1,class _U2>
pair<_U1, _U2>&
operator=(const pair<_U1,_U2>& __p)
{
first = __p.first;
second = __P.second;
return (*this);
}
};
//make_pair 函数
template <class _T1,class _T2>
inline pair<_T1,_T2>
make_pair(_T1 x,_T2 y)
{
return pair<_T1,_T2>(x,y);
}
//相等判断运算符
template <class _T1,class _T2>
inline bool
operator==(const pair<_T1,_T2>& x,const pair<_T1,_T2>& y)
{
return x.first == y.first && x.second == y.second;
}
}
int main()
{
//测试无参构造函数
std2::pair<int,std::string> pa1;
cout<<"pa1:"<<pa1.first<<" "<<pa1.second<<endl;//0 empty
pa1.first = 1;
pa1.second = "T111";
cout<<"pa1:"<<pa1.first<<" "<<pa1.second<<endl;
//测试有参构造函数
std2::pair<int,string> pa2(2,"T222");
cout<<"pa2:"<<pa2.first<<" "<<pa2.second<<endl;
//测试 ==
if(pa1 == pa2){
cout<<"pa1 = pa2"<<endl;
}else{
cout<<"pa1 != pa2"<<endl;
}
//测试 make_pair(make_pair先调用有参构造函数,返回时再调用拷贝构造函数)
std2::pair<int,string> pa3 = std2::make_pair(3,"T333");
cout<<"pa3:"<<pa3.first<<" "<<pa3.second<<endl;
//测试赋值运算符
pa3 = pa2;
cout<<"pa3:"<<pa3.first<<" "<<pa3.second<<endl;
//测试拷贝运算符 ??
std2::pair<int,string> pa4(pa1);
cout<<"pa4:"<<pa4.first<<" "<<pa4.second<<endl;
std2::pair<int,string> pa5 = pa2;
cout<<"pa5:"<<pa5.first<<" "<<pa5.second<<endl;
return 0;
}
STL 标准库 - 001
最新推荐文章于 2024-07-23 09:27:48 发布