作为一个C语言程序猿来说,数组是非常重要的,也是必不可少的一种数据组织和存储方式。在C++中却很少使用数组。从根本说主要有以下几个方面:


  1. 数据存储方式:    

    (1)数组的内存地址是连续的,也就是说如果你要申请的内存地址必须是连在一起的。数组为每一个元素申请的空间大小相同的,连续的存储空间。对于空间的申请和控制需要我们自己控制。

    (2)vector也是连续的存储空间。对于空间的申请和控制都由标准库帮我们管理。



  2. 空间利用率:

        (1)数组在定义的时候已经指定了空间的大小,不能改变,除非你新申请一个空间来存储之前的数据。数组初始化之后,他的空间一般都是被完全利用的。

        (2)vector和数组有略微不同。vector的长度是可变的,用户可以根据自己的需要插入和删除一个或者多个元素。其实,使用vector的时候我们要保证vector能动态的增长,标准库会为vector提供备用空间来新加元素。空间利用率不是很高。


    3.空间申请和占用:

        (1)数组一经定义大小和空间都确定了,大小是存储的数据类型长度和数据个数的乘积。

        (2)vector在确定元素个数的时候,其实还是有一部分的备用空间来保证容器能够动态增长。如果备用空间不够了,那么vector就会重新申请内存,并且这个时候的内存大小一般都是原来大小的两倍,vector容器重新分配2倍于原来空间大小之后就会把原来的内容拷贝过来,然后就在原来元素之后添加新的元素,并释放原内容的内存空间。


    4.访问元素:

        (1)vector可以使用迭代器和下标访问元素,下标访问的时候,下标的数据类型为vector::size_type

        (2)数组元素能使用下标和指针访问,下标的数据类型是:size_t。指针操作类似于迭代器。


    5.附加操作:

        vector作为标准库的容器,标准库为我们提供了很多的附加操作。和数组相比,vector还提供了迭代器为我们访问容器元素,可以参照我之前的文章。

        

    在C++中我们要尽量使用标准库提供的STL来代替数组,让标准库为我们管理内存的申请和释放等。但是如果你的应用对时间和空间要求非常高,那么最好还是使用数组,不过一定要保证对数组的合理操作。