正如我们看到的,尽管c++的数组支持容器机制。但是它不支持容器抽象的语义。为了在这个层次上编写程序。在标准c++之前。要么我们从某个途径获取这样的类。要么我们自己编写这样的类。
在标准c++中。数组类是c++标准库中的一部分。现在它不叫数组了,而叫向量(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;
/////,.............................
}
}