C++ STL 泛型编程
在计算机程序设计领域,大家都能取得的一个共识是 —— 函数库对数据类型的选择对其可重用性起着至关重要的作用。举例来说,一个求方根的函数,在使用浮点数作为其参数类型的情况下的可重用性肯定比使用整型作为它的参数类性要高。因此,为了避免因数据类型的不同,而被迫重复编写大量相同业务逻辑的代码,计算机科学家们提出了泛型及泛型编程技术。
什么是 C++ 泛型
所谓泛型,实质上就是不使用具体数据类型(例如 int、double、float 等),而是使用一种通用类型来进行程序设计的方法,该方法可以大规模的减少程序代码的编写量,让程序员可以集中精力用于业务逻辑的实现。
为了更好地说明使用具体数据类型有多么麻烦,这里先举个例子,假设客户需要一个函数,功能是返回两个 int 类型数据中较大的那个,很多读者自然而然会编写如下代码:
int maxt(int x, int y) {
return (x > y) ? x : y;
}
可是没过几天,该用户又提出需要编写一个返回两个 double 类型数据中较大的那个,于是我们需要之前的代码进行修改:
double maxt(double x, double y) {
return (x > y) ? x : y;
}
之后,该用户又提出需要再编写一个能返回两个 char 类型数据中较大的那个......
可以看到,只是因为数据类型不同,就迫使我们不得不把具有相同功能的代码写了若干遍,这样的实现方法简直令人崩溃。为了解决类似的问题,有聪明的人将代码修改成如下的样子:
T maxt(T x, T y) {
return (x > y) ? x : y;
}
如此,当用户需要某个数据类型的 maxt
函数时,我们只需要把其中的 T
替换成用户需要的实际数据类型就行了。
那么,代码中的 T
是什么呢?很明显,这是一个占位符,更确切的说是一个类型占位符。也就是说,将来在 T
这个位置上的是一个真实、具体的数据类型,至于到底是哪个类型,完全取决于用户的需求。