构建一种新类型的第一步通常是把所需的元素组织成一种数据结构。下面是一个 struct的示例:

    1. struct Vector{
    2. int sz; //元素的数量
    3. double elem; //指向元素的指针
    4. };

    这是 Vector的第一个版本,其中包含一个int和一个 double*。
    一个 Vector类型的变量可以通过下述形式进行定义:
    Vector v;

    仅就v本身而言,它的用处似乎不大,因为v的eem指针并没有指向任何实际的内容。为了让它变得更有用,我们需要令ⅴ指向某些元素。例如,我们可以构造一个如下所示的Vector:

    1. void vector_init(Vector& v,int s)
    2. {
    3. v.elem=new double[s]; //分配一个数组,它包含s个double的值
    4. v.sz=s;
    5. }

    也就是说,v的elem成员被赋予了一个由new运算符生成的指针,而sz成员的值则是元素的个数。 Vector&中的符号&指定我们通过非常量引用(见22.5节和7.7节)的方式传递v,这样 vector inite()就能修改传入其中的向量了。
    new运算符从一块名为自由存储( free store)(又称为动态内存( dynamic memory)或堆
    (heap),见112节)的区域中分配内存。
    Vector的一个简单应用如下所示:

    1. double read_and_sum(int s) //从cin读入s个整数,然后返回这些整数的和;其中,嘉定s是正的
    2. {
    3. Vector v;
    4. vector_init(v,s);
    5. for(int i=0;i!=s;i++)
    6. cin>>v.elem[i]; //读入元素
    7. double sum=0;
    8. for(int i=0;i!=s;i++)
    9. sum+=v.elem[i]; // 计算元素的和
    10. return sum;
    11. }

    显然,在灵活性和优雅程度上我们的Ⅴector与标准库 vector还有很大差距,尤其是Vector的使用者必须清楚地知道它的所有细节。本章余下的部分以及下一章将把 Vector当作呈现语言特性和技术的一个示例,一步步地完善它。作为对比,第4章将介绍标准库vector,在其中蕴含着很多漂亮的改进,第31章将结合其他标准库功能呈现完整的 vector。
    本书使用 vector和其他标准库组件作为示例,试图达到以下两个目的:

    1. 展现语言特性和程序设计技术;
    2. 帮助读者学会使用这些标准库组件。

    忠告:与其试着重写 vector和 string等标准库组件,不如直接将它们拿来使用。

    访问 struct成员的方式有两种:一种是通过名字或引用,这时我们使用.(点运算符);另一种是通过指针,这时用到的是->。例如:

    1. void f(Vector v,Vector& rv,Vector* pv)
    2. {
    3. int i1=v.sz; //通过名字访问
    4. int i2=rv.sz; //通过引用访问
    5. int i4=pv->sz //通过指针访问
    6. }