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