STL总结

    技术2022-05-11  63

    模板类 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有时需要的。

     

    最新回复(0)