#include <iostream>
#include <string>
using namespace std;
/*C++允许定义具有通用类型的函数模板
*该程序定义了一个具有通用类型的两个值中秋较大者的模板函数
*/
template <typename T>
T maxValue(T value1, T value2){
if(value1 > value2)
return value1;
else
return value2;
}
int main(){
cout<<"Maximum between 1 and 3 is "<<maxValue(1,3)<<endl;
cout<<"Maximum between 1.5 and 0.3 is "<<maxValue(1.5,0.3)<<endl;
cout<<"Maximum between 'A' and 'N' is "<<maxValue('A','N')<<endl;
cout<<"Maximum between \"ABC\" and \"ABD\" is "<<maxValue("ABC","ABD")<<endl;
return 0;
}
数据结果:
#include <iostream>
#include <string>
using namespace std;
template <typename T>
void sort(T list[], int arraySize){
//Find the maximum in the list[0...i]
T currentMax = list[0];
for(int i = arraySize - 1; i >= 1; i-- ){
for(int j = 1; j <= i; j++){
if (currentMax < list[j]){
currentMax = list[j];
list[j] = list[i];
list[i] = currentMax;
}
}
}
}
template <typename T>
void printArray(T list[], int arraySize){
for(int i = 0; i < arraySize; i++)
cout << list[i] <<" ";
cout << endl;
}
int main(){
int list1[] = {3, 5, 1, 0, 2, 8, 7};
sort(list1, 7);
printArray(list1, 7);
double list2[] = {3.5, 0.5, 1.4, 0.4, 2.5, 1.8, 4.7};
sort(list2, 7);
printArray(list2, 7);
string list3[] = {"Atlanta", "Denver", "Chicago", "Dallas"};
sort(list3, 4);
printArray(list3, 4);
return 0;
}
下面通过是一个栈实现用例,展现模板的用处
#ifndef STACK_H
#define STACK_H
template <typename T>
class Stack{
public:
Stack();
bool empty();
T peek();
void push(T value);
T pop();
int getSize();
private:
T elements[100];
int size;
};
template <typename T>
Stack<T>::Stack(){
size = 0;
}
template <typename T>
bool Stack<T>::empty(){
return (size == 0);
}
template <typename T>
T Stack<T>::peek(){
return elements[size - 1];
}
template <typename T>
void Stack<T>::push(T value){
elements[size++] = value;
}
template <typename T>
T Stack<T>::pop(){
return elements[--size];
}
template <typename T>
int Stack<T>::getSize(){
return size;
}
#endif // STACK_H
#include <iostream>
#include <string>
#include "GenericStack.h"
using namespace std;
template<typename T>
void printStack(Stack<T> &stack){ //定义了一个打印Stack的函数
while(!stack.empty())
cout << stack.pop() <<" ";
cout << endl;
}
int main(){
//Create a stack of int values
Stack<int> intStack;
for(int i = 0; i < 10; i++)
intStack.push(i);
printStack(intStack);
//Create a stack of strings
Stack<string> stringStack;
stringStack.push("Chicago");
stringStack.push("Los Angeles");
stringStack.push("London");
printStack(stringStack);
return 0;
}