cpp模板的優點?
使用模板的目的:
模板是C++標準中相當重要的一部分,它是通用編程成為現實的理想方法。模板還有在編譯時被解釋的特點。模板是對迅速解決復雜問題有效手段,特別是標準模板類庫
使用模板的優缺點:
(1) 優點 : 1)編寫一個模板,就可以在實例化的時候 由一個模板解決不同類型數據所產生的相同問題;比如說排序問題,你可以給int 數據排序和cha類型數據排序,沒有引入類模板,就需要編寫兩次排序函數,而引入類模板之后,就可以在實例化的時候,根據不同的數據類型實例化排序方法,做到一模板半多用的作用,即多態。
2)實現了代碼的重用,節約了程序員時間和精力,這也是出現標準庫的原因
(2) 缺點:1)模板的數據類型只能在編譯時才能被確定。因此,所有用基于模板算法的實現必須包含在整個設計的頭文件中。
2)由于模板只是最近加入C++標準中,所以有些C++編譯器還不支持模板,當使用這些編譯器時編譯含有模板的代碼時就會發生不兼容問題。
關于模板的例子
(1)函數模版
#include<iostream>
using namespace std;
template <typename T>
T maximum(const T n1,const T n2)
{
if(n1>n2)
return n1;
else
return n2;
}
int main()
{
charc1='a',c2='b';
inti1=1,i2=2;
double f1=2.5,f2=3.5;
cout<<maximum(c1,c2)<<endl;
cout<<maximum(i1,i2)<<endl;
cout<<maximum(f1,f2)<<endl;
return 0;
}
(2)類模板
文件1: stack.h
#if !defined SATACK_T_H
#define SATACK_T_H
template <typename T>
class stack
{
public:
stack( int n = 10 );
~stack();
bool pop(T & data_item);
bool push(const T & data_item);
inline int number_stacked()const;
inline int stack_size() const;
private:
int max_size;
int top;
T* data;
};
template<typename T>
stack<T>::stack(int n)
{
max_size = n;
top = -1;
data = new T[n];
}
template<typename T>
stack<T>::~stack( )
{
delete [] data;
}
template<typename T>
bool stack<T>::push(const T &data_item )
{
if( top < max_size - 1)
{
data[++ top ] = data_item ;
return true;
}
else
return false;
}
template<typename T>
bool stack<T>::pop(T & data_item)
{
if( top > -1 )
{
data_item = data [top -- ];
return true;
}
else
return false;
}
template<typename T>
int stack<T>::number_stacked() const
{
return top+1;
}
template<typename T>
int stack<T>::stack_size() const
{
return max_size;
}
#endif
在這里需要注意一個問題:
引用類模板時必須包含它的形參列表,這就是成員函數使用stack《T》而不是stack的原因。如果堆棧類不是模板,僅需要使用stack。