函数模板
函数的形参数据类型通用
/*
定义一个函数模板,返回数组元素中的最小值。
模板参数列表中包括类型参数表示数组的类型和非类型参数表示数组的size。
*/
#include <iostream>
using namespace std;
class A{
public:
template <class T, int Size>
T minInArray(const T (&array)[Size]){//这里传引用才能把数组传进去,T和Size都会起作用
T min = array[0];
int i;
for (i = 0; i < Size; i++){
if (array[i] < min){
min = array[i];
}
}
return min;
}
};
int main(){
A aaa;
int a[5] = {3, 3, 5, 2, 7};
double b[5] = {1.0, 2.55, 0.8, 1, 3};
string s[3] = {"b", "c", "a"};
cout << "minInArraya= " << aaa.minInArray(a) << endl;
cout << "minInArrayb= " << aaa.minInArray(b) << endl;
cout << "minInArrays= " << aaa.minInArray(s) << endl;
return 0;
}
类模板数组栈
类的对象元素类型通用,一种数据结构类型的元素可以通用不同类型的数据。
#include <iostream>
using namespace std;
template <class T, int Size = 16>
class Mystack{
private:
T a[Size];
int top;
public:
//默认构造函数
Mystack():top(-1){}
//赋值构造函数
Mystack(const Mystack& other){
top = other.top;
int i;
for (i = 0; i <= other.top; i++){
a[i] = other.a[i];
}
}
//析构函数
virtual ~Mystack(void){}
//赋值运算符重载函数
Mystack& operator = (const Mystack& other){
top = other.top;
int i;
for (i = 0; i <= other.top; i++){
a[i] = other.a[i];
}
return *this;
}
void push(T data){
++top;
if(top >= Size){
cout << "stack overflow" << endl;
--top;
return;
}
a[top] = data;
}
T pop(){
if (top < 0){
cout << "stack empty" << endl;
return a[0];
}
return a[top--];
}
void print(){
int i;
cout << "---------" << endl;
cout << "stack:" << endl;
for (i = top; i >= 0; i--){
cout << a[i] << endl;
}
cout << "---------" << endl;
}
};
//栈空
void test1(){
cout << "-----test1:" << endl;
Mystack<int, 4> stack;
cout << stack.pop() << endl;
}
//栈溢出
void test2(){
cout << "------test2:" << endl;
Mystack<int, 4> stack;
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
stack.print();
}
int main(){
test1();
test2();
return 0;
}
简化版
class Mystack{
#define Size 16
private:
int a[Size];
int top;
public:
//默认构造函数
Mystack():top(-1){}
void push(int data){
++top;
if(top >= Size){
cout << "stack overflow" << endl;
--top;
return;
}
a[top] = data;
}
int pop(){
if (top < 0){
cout << "stack empty" << endl;
return a[0];
}
return a[top--];
}
};