存储方式
数组:栈区
array对象:栈区
vector对象:堆区
效率
(1)在对长度固定的情况下,数组是最佳的的选择,但是代价是不那么方便和安全
(2)vector类的功能比数组强大,但是代价是效率稍低
(3)鉴于上述两种情况,C++11新增的模板类array进行了新的设计,array的长度固定,也是用栈,因此效率与数组相同,但是更方便,更安全
本质
数组作为一种数据结构,其实是不必和其他两种作比较的,array与vector作为类模板,属于泛型编程,在类的内部完成对数组行为的模拟,并在其基础上实现了对操作的检测与其他功能,C++面向对象中继承的特点被完美运用,增加了其他的功能。
与上述的安全问题上列举以下例子即可明白
a[1]于数组和其他两种类的对象均可以进行访问,而array和vector提供了a.at(1)的方法来进行访问,中括号表示法和成员函数at()的差别在于,使用at()时,在运行期间捕获非法索引,而程序默认中断,当然这种发的额外检查代价是运行时间更长。
其他补充
请不用为vector类是在堆区进行创建而为释放问题苦恼,实际上vect实在是用new和delect来管理内存,这种工作是自动完成。
由此可以看出:vector类的出现,是为了替代动态数组;而array类的出现则是定长数组的替代品。