模板(Template)指C++程序设计设计语言中采用类型作为参数的程序设计,支持通用程序设计。C++ 的标准库提供许多有用的函数大多结合了模板的观念,如STL以及IO Stream。
模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。
模板是一种对类型进行参数化的工具;
通常有两种形式:函数模板和类模板;
函数模板 针对仅参数类型不同的函数;
类模板 针对仅数据成员和成员函数类型不同的类。
使用模板的目的就是能够让程序员编写与类型无关的代码。
.printArray模板函数
#include<iostream>
using namespace std;
template<class T>
void printArray(T* a, int n){
for (int i = 0; i < n; i++)
cout << a[i]<<" ";
cout << endl;
}
int main() {
int a[5] = { 1,2,3,4,5 };
char b[6] = { "aeiou"}; //别忘了给/0留一个位置。
double c[4] = { 1.1,1.4,3.2,1 };
string d[3] = { "i","love" ,"you"};
cout << "a[] contains :";
printArray(a, 5);
cout << "b[] contains :";
printArray(b, 6);
cout << "c[] contains :";
printArray(c, 4);
cout << "d[] contains :";
printArray(d, 3);
}
a[] contains :1 2 3 4 5
b[] contains :a e i o u
c[] contains :1.1 1.4 3.2 1
d[] contains :i love you
2.stack模板类
#include<iostream>
using namespace std;
template<class T>
class stack {
private:
int size;
int top;
T* stackPtr;
public:
stack(int s=10):size(s>0?s:0),top(-1),stackPtr(new T[size]){}
~stack() {
delete[]stackPtr;
}
bool push(const T& a) {
if (!isFull()) {
top++;
stackPtr[top] = a;
return true;
}
return false;
}
bool pop(T& a) {
if (!isEmpty()) {
a = stackPtr[top--];
return true;
}
return false;
}
bool isEmpty() {
return top == -1;
}
bool isFull() {
return top == (size - 1);
}
void print() const {
cout << "从下至上输出栈元素 :";
for (int i = 0; i < size; i++) {
cout << stackPtr[i]<<" ";
}
cout << endl;
}
};
int main() {
stack<double> s(5);
double pushValue = 1.1;
while (s.push(pushValue)) {
cout << pushValue << " ";
pushValue += 1.1;
}
cout << "stack is full" << endl;
cout << "s :";
s.print();
double popValue;
while (s.pop(popValue)) {
cout << popValue<<" ";
}
cout << "stack is empty";
}
模板类使用的时候是要声明数据类型的,就像你用的标准模板库里的vector一样。
1.1 2.2 3.3 4.4 5.5 stack is full
s :从下至上输出栈元素 :1.1 2.2 3.3 4.4 5.5
5.5 4.4 3.3 2.2 1.1 stack is empty