既然你说的是固定大小的数组,我假设你想比较类似的东西
int my_array[10];
与
vector<int> my_vector;
在第一种情况下,程序将请求内存中所需的空间,并将该空间视为您的代码所遵循的连续整数。
至于向量,它是一个在内部管理一些内存位置的类,因此,正如您编写的代码一样,当您向它请求一些值时,它会寻找它所在的位置并给您结果。
向量不会分配无限长的内存,所以如果它为十个整数分配了内存,然后你添加第十一个,它会自动收集更多的内存空间并找到一种方法来保存实际值。
如何实现取决于实现。每次需要更多时,我使用的内存空间都会翻倍,并将以前的值复制到新位置。
一些程序员喜欢编写自己的向量类,让它每次都请求固定大小的内存,或者为特定的常量乘以空间。
一些推理:
为什么向量没有通用规则?
对不起,我不能给你一个非常通用的“向量是如何工作的”,但这就是向量的想法,他们做的工作,你不用担心 =)
每个实现都有它的理念。
Java 的我不知道,但必须和我知道的 C++ 类似。
为什么要加倍大小?或者为什么要求固定大小?
假设您需要存储一千个整数。
每次需要更多空间时,该请求空间的向量为 10 个整数,将分配 10,然后加 10,然后加 10,然后...一百个分配。
每次将其大小翻倍的向量将请求 1、2、4、8、16、32、64、128、256、512、1024 的空间。只有十个分配。
一些程序员不希望最后有 24 个空格,或者只想要一个分配(立即分配一千个),所以他们创建了一个向量类,分配一些他们认为好的固定内存大小。
C++ 向量具有专门针对此问题的函数,例如 resize(),它将要求向量具有特定大小,或 reserve(),它将要求向量在内存中保留特定数量的空间。
而且,至少,这个网站是黄金:
http://www.cplusplus.com/reference/vector/vector/
这是关于 C++ 实现的,但这个想法是通用的。而且读书很好=)