容器、迭代器和通用算法是三位一體的概念,下面我們以向量類模板Vector為例[1],具體闡述它們的必要性。
template<class T>
class Vector
{
private:
T *data;//數組指針
int theSize;//數據元素個數
int theMax;//數組長度,即容量
void Error(const char* cs)const {cout<<cs<<endl; exit(1);} //錯誤信息報告
public:
explicit Vector(int n=0):theSize(0), theMax(n+SPARE_MAX)
{if(theMax>0) data=new T[theMax];}
Vector(const Vector v):data(NULL), theMax(0){operator=(v);}//拷貝構造函數
~Vector(void){delete[]data;}
Vector operator=(const Vector<T> v);//復制賦值函數
T operator[](int id){return(data[id]);}//下標運算符函數
const T operator[](int index)const{return(data[id]);}//常量型下標運算符函數
bool Empty(void)const{return(theSize==0);} //判空
int Size(void)const{return(theSize);}//求數據個數
int Max(void)const{return(theMax);}//求數組容量
void Push_back(const T item);//尾插
void Pop_back(void); //尾刪
const T Back(void)const;//返回尾元素的引用
const T Front(void)const;//返回起始元素的引用
void Reserve(int newMax);//擴大數組容量為newtheMax,保留原來數據
void Resize(int newSize,const T item=T());//把數據個數擴大為newtheSize,原數據保留,
//其余的值初始化為item
enum{SPARE_MAX=16};//枚舉常量表示數組最小長度
};
1容器、迭代器和通用算法
向量類模板是一種容器類。容器類的對象包含一組元素,這組元素又同是一種類的對象。容器類的對象稱為容器。我們學過的數組、基本順序表都是容器類。一個整型數組和一個字符型數組,是數組容器類的兩個對象,即兩個容器,它們的元素類型分別是整型和字符型,因此也稱為整型數組容器和字符型數組容器。容器中的元素依然可以是容器,例如基本順序表數組,其中每一個數組元素都是基本順序表容器。以后我們主要討論類模板形式的容器類,例如向量類模板。

Vector<char> charV;//字符型Vector容器charV
Vector<Vector<char> > char_V;//Vector容器char_V的元素是字符型Vector容器
一般我們把非容器類型稱為數值類型。整型、實型、字符型、Date類型、String都是數值類型。String之所以不是容器類,是因為它的任何對象所包含的一組元素只能是字符型,不能是其他類型。
有一些算法對每一種容器都是需要的,稱為通用算法。例如,輸出容器中的每一個元素,增加容器中的每一個元素的值,查找容器中最大的元素。……