正如我們看到的,盡管c++的數(shù)組支持容器機(jī)制。但是它不支持容器抽象的語義。為了在這個(gè)層次上編寫程序。在標(biāo)準(zhǔn)c++之前。要么我們從某個(gè)途徑獲取這樣的類。要么我們自己編寫這樣的類。
在標(biāo)準(zhǔn)c++中。數(shù)組類是c++標(biāo)準(zhǔn)庫中的一部分。現(xiàn)在它不叫數(shù)組了,而叫向量(vector)、
當(dāng)然向量是一個(gè)類模板,我們可以這樣寫:
vector<int> ivec(10);
vector<string>svec(10);
上面的代碼分別定義了包含10個(gè)整型的對象的向量,和定義了包含10個(gè)字符串的對象的向量。
在我們實(shí)現(xiàn)的Array類模板和vector類模板的實(shí)現(xiàn)中有兩個(gè)不同的區(qū)別;
vector類模板支持“向現(xiàn)有的數(shù)組元素賦值”的概念以及“插入附件元素的”概念---------即vector數(shù)組可以在運(yùn)行時(shí)動(dòng)態(tài)的增長。(如果程序員愿意使用這個(gè)特征的話。)
第二個(gè)區(qū)別是 : 更加廣泛。代表了設(shè)計(jì)方法的重要改變。vector類不是提供一個(gè)巨大的“可以適用于向量”的操作集。如;store(),min().max()等。而是只是提供一個(gè)最小集;如:等于,小于,size(),empty()等操作。而一些通用的操作如:sort(),min().max(),find()。等操作是作為獨(dú)立的泛型算法(generic algorthem)被提供的。
要定義一個(gè)向量我們必須包含相關(guān)的頭文件。
#include<vector>
下面都是vector對象的合法定義。
vector<int>vecto;///////空的vector
const int size=8;
const int value=1024;
//size為8的vector
///每個(gè)元素都被初始化為0
vector<int>vecto(size);
//size為8的vector
///每個(gè)元素都被初始化為1024
vector<int>vecto(size ,value);
////vector3的size為8
///vector3的初始化值為ia 的4個(gè)值
int ia[4]={0,1,1,2};
vector<int>vector3(ia,ia+4);
////vector4是vector2的拷貝。
vector<int>vector4(vector2);
既然定義了向量,那么我們就必須遍歷里面的元素。
與Array類模板一樣。標(biāo)準(zhǔn)的vector類模板也支持使用下面的操作符。
例如:
#include<vector>
extern int getsiz();
void mumble()
{
int size=getsize();
vector<int>vec(size);
for(int i=0;i<=size;i++)
{
vec[i]=i;
/////,.............................
}
}