STL总结

来源:互联网 发布:oracle java认证 编辑:程序博客网 时间:2024/05/14 19:57

模板类 pair 的一个成员模板函数

template <class U1,class U2>

pair(const pair<U1,U2>&x):first(x.first),second(x.second) 

如果两个变量都不是常量类型,可以使用make_pair(x,y),来产生一个pair的对象。

对照上面的构造函数来看,其中的x是赋值给x.first,y是赋值给x.second。

x.first是U1类型,x.second是U2类型。x.first和x.second是pair的两个成员对象。

pair模板类的构造函数:

template<class T1,classT2>struct pair

{

typedef T1 first_type;

typedef T2 second_type;

pair():first(T1()),second(T2()){}

pair(const T1&V1,const T2&V2):first(V1),sencond(V2){}

template<class U1,class U2>pair(const pair<U1,U2>):first(x.first),second(x.second){}

T1 first;

T2 second;

};

第一个(默认)构造函数将first初始化为T(),second初始化为U()。
第二个构造函数将first初始化为x,second初始化为y。第三个(模板)
构造函数将first初始化为pr.first,second初始化为pr.second。T和U只需各自提供一个默认构造函数,一个接受单参数的构造函数,以及一个析构函数

make_pair的作用与问题:可以在必要时产生一个pair对象。但不是每次都成功,因为模板函数在检测模板参数时将忽略点所有的const属性(至少他们可以这样做,某些编译器就是这样处理的。)也就是说我们不能依赖make_pair产生一个含有一个和多个常量成员的对象的pair对象。而这些map和multimap有时需要的。

 
原创粉丝点击