C++中new一个动态数组(内置类型和自定义类型的区别)
在学习数据结构与算法的时候,T *p = new T[n]
的算法复杂度为Θ(n),而int *p = new int[n]
的算法复杂度为Θ(1)。
C++ primer的动态内存的讲解没有关于这一点的解释,自己测试了一下:
#include<iostream>
using namespace std;
struct myClass
{
int i = 5;
};
ostream &operator<<(ostream &out, const myClass &a)
{
cout << a.i;
return out;
}
int main()
{
int *p1 = new int[5];
myClass *p2 = new myClass[5];
for (int i = 0; i < 5; ++i)
cout << p1[i] << " ";
cout << endl;
for (int i = 0; i < 5; ++i)
cout << p2[i] << " ";
cout << endl;
return 0;
}
对于动态数组的初始化:
对于内置数据类型元素的数组,必须使用()来显示指定程序执行初始化操作,否则程序不执行初始化操作:
int *p1 = new int[5]; // 每个元素都没有初始化
int *p2 = new int[5] (); // 每个元素初始化为0
自定义类型元素的数组,则无论是否使用(),都会自动调用其默认构造函数来初始化:
myClass *p1 = new myClass [5]; // 每个元素调用默认构造函数初始化
myClass *p2 = new myClass [5] (); // 每个元素调用默认构造函数初始化
所以n个元素调用默认构造函数的算法复杂度为Θ(n)。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: element ui 表单验证 要主要的问题(小结1)
- 下一篇: 一维数组转化为二维数组(java)