ZZ:http://blog.sina.com.cn/s/blog_4aa0943f0100ce8k.html
C++模板
▌模板(template)——泛型编程
①函数模板(function template)
★定义:C++提供了一种方法,只写一个通用的函数,用通用的未实例化的类型来当参数类型。这个通用参数是在函数被调用的时候才实例化的,这个通用的函数就叫做函数模板。
例:
int main()
{
const int max=5;
int iArray[max]={10, 20, 30, 40, 50};
float fArray[max]={1.1, 1.2, 1.3, 1.4,1.5};
char* cArray[max]={"one", "two", "three", "four","five"};
for (int i=0; i<max; i++)
{cout<<iArray[i]<<",";}
cout<<"\n";
for (i=0; i<max; i++)
{cout<<fArray[i]<<",";}
cout<<"\n";
for(i=0; i<max; i++)
{cout<<cArray[i]<<",";}
return 0;
}
把for循环嵌入函数中:
void printArray(int* array, int size){
for (int i=0; i<size; i++){
cout<<array[i];
if(i<(size-1)){
cout<<",";
}
}
}
void printArray(float* array, int size){
for (int i=0; i<size; i++){
cout<<array[i];
if(i<(size-1)){
cout<<",";
}
}
}
void printArray(char** array, int size){
for (int i=0; i<size; i++){
cout<<array[i];
if(i<(size-1)){
cout<<",";
}
}
}
for循环嵌入函数后的main函数:
main()
{
const int max=5;
int iArray[max]={10,20,30,40,50};
float fArray[max]={1.1, 1.2, 1.3, 1.4,1.5};
char* cArray[max]={"one", "two", "three", "four","five"};
printArray(iArray, max);
cout<<endl;
printArray(fArray, max);
cout<<endl;
printArray(cArray, max);
cout<<endl;
return 0;
}
★为了避免上面这种复杂的形式,C++提供了一个模板结构,以参数化的形式来定义一个函数或者类。
例:(模板)
template<class T>
void printArray(T* array, int size){
for(int i=0; i<size; i++){
cout<<array[i];
if(i<(size-1)){cout<<",";}
}
}
main()
{
const int max=5;
int iArray[max]={10,20,30,40,50};
float fArray[max]={1.1, 1.2, 1.3, 1.4,1.5};
char* cArray[max]={"one", "two", "three", "four","five"};
printArray(iArray, max);
cout<<endl;
printArray(fArray, max);
cout<<endl;
printArray(cArray, max);
cout<<endl;
return 0;
}
②类模板(class template)
★例:
#include <iostream>
#include <string>
using namespace std;
template <classT> //写法等同于:template<typenameT>;
class Stack //创建一个栈的类;
{
public:
Stack(int=10);
~Stack(){delete [] stackPtr;}
int push(constT&); //压栈;
intpop(T&); //弹栈;
int isEmpty() const {returntop==-1;} //判断栈空,top=0指向第一个元素,top=-1则表示没有元素;
int isFull() const {return top==size-1;} //栈满;
void printOn(ostream &output); //“这句显得很垃圾”;
private:
intsize; //栈的大小;
inttop; //栈顶;
T* stackPtr; //栈的指针;
};
template<class T>
Stack<T>::Stack(int s)
{
size=s>0&& s<1000 ?s:10; //s>0&& s<1000 ?s:10赋值给size;
top=-1; //表示“一个元素都没有”
stackPtr=new T[size];
}
template<class T>
voidStack<T>::printOn(ostream&output)
{
output<<"stack ( ";
for (int i=0; i<=top; i++)
{
output<<stackPtr[i]<<",";
}
output<<" )\n";
}
template<class T>
int Stack<T>::push(constT& item)
{
if (!isFull())
{
stackPtr[++top]=item;
return 1;
}
return 0;
}
template<class T>
int Stack<T>::pop(T&item)
{
if (!isEmpty())
{
item=stackPtr[top--];
return 1;
}
return 0;
}
int main()
{
int i;
Stack<int>stack1;
for(i=0; i<5; i++)
{
stack1.push(i*10);
stack1.printOn(cout);
}
Stack<float>stack2;
for (i=0; i<5; i++)
{
stack2.push(i*1.1);
stack2.printOn(cout);
}
char* cArray[5]={"one", "two", "three","four", "five"};
Stack<char*>stack3;
for(i=0; i<5; i++)
{
stack3.push(cArray[i]);
stack3.printOn(cout);
}
return 0;
}
★在实例化的时候可以给通用类型赋一个默认类型。
template<classT=int> //T可以缺省赋值,声明变量的时候,缺省赋值可以去掉<>.
(2009-04-16 20:33:56)
ZZ:http://blog.sina.com.cn/s/blog_4aa0943f0100ce8k.html
C++模板
▌模板(template)——泛型编程
①函数模板(function template)
★定义:C++提供了一种方法,只写一个通用的函数,用通用的未实例化的类型来当参数类型。这个通用参数是在函数被调用的时候才实例化的,这个通用的函数就叫做函数模板。
例:
{
}
把for循环嵌入函数中:
void printArray(int* array, int size){
void printArray(float* array, int size){
void printArray(char** array, int size){
for循环嵌入函数后的main函数:
main()
{
}
★为了避免上面这种复杂的形式,C++提供了一个模板结构,以参数化的形式来定义一个函数或者类。
例:(模板)
template<class T>
void printArray(T* array, int size){
main()
{
}
②类模板(class template)
★例:
#include <iostream>
#include <string>
using namespace std;
template <classT>
class Stack
{
public:
private:
};
template<class T>
Stack<T>::Stack(int s)
{
}
template<class T>
voidStack<T>::printOn(ostream&output)
{
output<<"stack ( ";
for (int i=0; i<=top; i++)
{
}
output<<" )\n";
}
template<class T>
int Stack<T>::push(constT& item)
{
if (!isFull())
{
}
return 0;
}
template<class T>
int Stack<T>::pop(T&item)
{
if (!isEmpty())
{
}
return 0;
}
int main()
{
}
★在实例化的时候可以给通用类型赋一个默认类型。
template<classT=int>
▌模板(template)——泛型编程
①函数模板(function template)
★定义:C++提供了一种方法,只写一个通用的函数,用通用的未实例化的类型来当参数类型。这个通用参数是在函数被调用的时候才实例化的,这个通用的函数就叫做函数模板。
例:
{
}
把for循环嵌入函数中:
void printArray(int* array, int size){
void printArray(float* array, int size){
void printArray(char** array, int size){
for循环嵌入函数后的main函数:
main()
{
}
★为了避免上面这种复杂的形式,C++提供了一个模板结构,以参数化的形式来定义一个函数或者类。
例:(模板)
template<class T>
void printArray(T* array, int size){
main()
{
}
②类模板(class template)
★例:
#include <iostream>
#include <string>
using namespace std;
template <classT>
class Stack
{
public:
private:
};
template<class T>
Stack<T>::Stack(int s)
{
}
template<class T>
voidStack<T>::printOn(ostream&output)
{
output<<"stack ( ";
for (int i=0; i<=top; i++)
{
}
output<<" )\n";
}
template<class T>
int Stack<T>::push(constT& item)
{
if (!isFull())
{
}
return 0;
}
template<class T>
int Stack<T>::pop(T&item)
{
if (!isEmpty())
{
}
return 0;
}
int main()
{
}
★在实例化的时候可以给通用类型赋一个默认类型。
template<classT=int>