2.3 数据结构
STL 的 vector 在开始为数组开辟较小的空间,然后往数组中添加数据。当数据的数目超过了数组的容量的时候,重新分配一块新的更大的空间。每次扩充容量的时候,新的容量是前一次的 1.5 倍 (VS) 或 2 倍 (GCC)。看这个链接了解为什么是这样子扩张。把之前的数据复制到新的数组中,然后把之前的内存释放。
-
当数组作为函数的参数进行传递的时候,数组就会自动退化成同类型的指针:
int getSize(int data[]) { return sizeof(data); } int main() { int a[] = {1, 2, 3, 4, 5}; cout << getSize(a) << endl; //4 return 0; }
递归的代码看起来很简洁,但是有一个问题:每一次调用函数,都需要在栈中分配空间以保存参数、返回地址以及临时变量。由于每个进程被分配的栈空间是有限的,所以当调用层级很深的时候,可能导致该进程的函数调用栈溢出。而且往栈中压入数据和弹出数据都需要时间。所以一般来说非递归的代码要比递归代码的效率高一点。