本帖最后由 major_lyu 于 2020-3-6 19:43 编辑
要实现动态数组,你只能重新分配更大空间,然后把原有的数据拷贝过去。
所以一般动态数组的实现都是每次当空间存满了还要存储新的数据就分配空间等于原来的二倍的空间,从而减少数据拷贝的频率。
像你这样每增加一个数据就新增一个空间的做法也可以,但是每次都得把之前的数据拷贝一下,效率非常低。
你可以看一下数据结构或者算法书中关于动态数组的讲解。
- #include <iostream>
- using namespace std;
- int main()
- {
- int len = 1;
- int *p = new int[len]; // 这一只分配了一个int的空间。
- for (int i = 0; i < 9; i++) // 访问p所指向的int空间之后的空间是不安全的。
- {
- if (i == len) //空间不足
- {
- int *temp = p;
- p = new int[len * 2]; //分配更大空间
- for (int j = 0; j < len; j++) // 拷贝原数据
- {
- *(p + j) = *(temp + j);
- }
- len *= 2;
- delete[] temp; //释放原来的空间。
- }
- *(p + i) = i + 1;
- cout << p + i << " / " << *(p + i) << endl;
- }
- // 最终的数组
- for (int i = 0; i < 9; i++)
- {
- cout << p + i << " / " << *(p + i) << endl;
- }
- delete[] p;
- system("pause");
- return 0;
- }
复制代码