一、什么是泛型编程(通用类型编程)
泛型编程实际上就是超越特定类型的编程方式,但我们需要提供每个程序实例的类型或值,让编译器在运行中能够识别。
c++泛型编程的例子,比如:vecter、迭代器等。
二、什么是模板?
模板就是程序编码的样版,超越数据类型来描述数据处理的方法。
三、模板分类:
模板分为:函数模板、类(结构体)模板
1、函数模板示例代码
(1)实现内容:
写一个Display函数,显示任意一个数组内容。
(2)实现代码:
#include <iostream>
#include <string>
using namespace std;
template <typename T>
void Display(const T array[], int size);
int main()
{
string strArray[5] = {"C++", "Is", "My", "Good", "Friend"};
char cArray[3] = {'a','b','c'};
int iArray[4] = {12, 34, 45,90};
cout<<"打印字符串类型的数组:"<<endl;
Display(strArray,5);
cout<<"打印字符类型的数组:"<<endl;
Display(cArray, 3);
cout<<"打印整型类型的数组:"<<endl;
Display(iArray, 4);
return 0;
}
template <typename T>
void Display(const T array[], int size)
{
for (int i = 0; i < size; i++)
{
cout<<array[i]<<endl;
}
return ;
}
(3)代码运行结果:
1、类模板示例代码
(1)实现内容:
重写一个栈类及一些接口函数。
(2)实现代码:
#include <iostream>
#include <string>
using namespace std;
template <typename T>//《狭义的理解,template是一个函数,typename是形态类型,T为形式参数》
class Stack
{
T stck[5];
int StckSize;
public:
Stack():StckSize()
{
//将StckSize初始化为零
;
}
void PushBack(const T &x)
{
stck[StckSize++] = x;
}
T& Top()
{
return stck[StckSize-1];//返回数组
}
void Pop()
{
--StckSize;
}
bool Empty() const
{
return StckSize == 0;
}
int size() const
{
return StckSize;
}
};
int main()
{
/**********************************************************************
*(1) Stack是类模板,不是类;
*(2)int、const char* 是类模板的形参;
*(3)类模板必须先实例化成类,方可基于类来创建类的实例《栈》。
**********************************************************************/
Stack<int> iStack;
iStack.PushBack(1);
iStack.PushBack(2);
iStack.PushBack(3);
iStack.PushBack(4);
Stack<const char*> cStack;
cStack.PushBack("Hello ");
cStack.PushBack("World");
while (!iStack.Empty())
{
//栈->先进先出
cout<<iStack.Top()<<" ";iStack.Pop();
}
cout<<endl;
while (!cStack.Empty())
{
//栈->先进先出
cout<<cStack.Top()<<" ";cStack.Pop();
}
cout<<endl;
return 0;
}
(3)代码运行结果: