模板与pair

模板

我们先来想一下这个问题:在使用数组时,数组的类型可以是 int,double  ... 甚至我们自己定义的结构体。这些数组都需要有添加,删除,甚至排序功能。而函数的参数类型是确定的,如果形参是 int 则不能处理 double 类型的数据。因此对于每一种类型,我们都需要写一遍对应的程序。那么能不能某个函数只写一次,就可以套用在各种类型上呢?答案是:可以。你需要使用模板编程。模板是泛型编程的基础, C++ 中的库容器、迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。完全理解模板,涉及的知识较广,所以我们不展开介绍,仅仅告诉大家什么是模板,如何使用模板,以及模板存在的意义。

pair

pair 是 C++ 标准库提供的模板类,它可以将 2 个数据组合成一组数据。它包括了 2 个成员变量 first 和 second 。但这两个成员的类型却是通过模板来来声明的。我们使用自定义的结构体也可以完成同样的功能

//创建一个空的pair对象(使用默认构造),它的两个元素分别是T1和T2类型,采用值初始化。
pair<T1, T2> p1;
我们来看一个例子:
pair<int, string> p1;
pair 的后面跟了两个类型,类似于定义了这样一个结构体:
struct myPair{
    int first;
    string second;
};
myPair p1;

这个结构体有 2 个成员 first 和 second 。他们的类型分别是 int 和 string 。

与 pair 有关常用的函数及使用:

//创建一个空的pair对象(使用默认构造),它的两个元素分别是T1和T2类型,采用值初始化。
pair<T1, T2> p1;
//创建一个pair对象,它的两个元素分别是T1和T2类型,其中first成员初始化为v1,second成员初始化为v2。
pair<T1, T2> p1(v1, v2);
// 以v1和v2的值创建一个新的pair对象,其元素类型分别是v1和v2的类型。
make_pair(v1, v2);
结构体不能嵌套自己,但是 pair 是可以嵌套的,例如:
void setBook(pair<int, pair<int, string> > &s){
    s.first = 3;
    s.second.first = 4;
    s.second.second = "World";
}
int main(){    //s的first类型是int,second类型是pair<int, string>
    pair<int, pair<int, string> > s;  
    s.first = 1;    //创建一个pair<int, string>赋值给 s的second成员
    s.second = make_pair(2, "Hello"); 
    setBook(s);
    cout << s.first << endl;
    cout << s.second.first << endl;
    cout << s.second.second << endl;
}

pair 的嵌套其实与之前所说的结构体嵌套情况有所不同,结构体不能嵌套自己,是因为某个值类型的数据类型中不能包括自己本身。而上面 pair ​ 的例子可以嵌套是因为 pair<int,pair<int,string>>与 pair<int,string>并不是相同的数据类型,因此不存在自己包含自己的情况。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值