一、C++ new数组
int* arr = new int[10]; // 分配一个有10个int型元素的数组
C++的new运算符除了用于创建单个对象外,还可以用于创建一个数组。与C的动态内存分配相同,使用new创建数组时需要指定元素的个数。上面的代码创建了一个有10个int型元素的数组,arr指向该数组。
同样地,我们可以使用delete运算符来释放该数组的内存:
delete[] arr; // 释放动态分配的数组内存
二、new动态数组
int n;
cin >> n;
double* arr = new double[n];
上面的代码创建了一个具有n个double型元素的数组。
三、C++ new数组初始化
int arr[] = {1, 2, 3, 4};
int* pArr = new int[4]{1, 2, 3, 4};
使用new[]创建数组时,可以用大括号{}来初始化数组的元素。上面的代码创建了两个具有4个int型元素的数组,并分别对它们进行了初始化。
四、new byte数组
int size = 10; // 申请10个字节
byte* arr = new byte[size];
C++中的byte类型用于表示存储空间中的单个字节,因此,可以使用它来申请特定大小的内存。
五、C++ new数组时传变量
int size;
cin >> size;
float* arr = new float[size];
C++允许使用变量来定义需要分配的内存大小。上面的代码就是一个例子。
六、new string数组
string* arr = new string[3];
arr[0] = "Hello";
arr[1] = "World";
arr[2] = "!";
除了基本类型,new[]也可以用于创建数组对象,例如string。上面的代码创建了一个具有3个string类型元素的数组,并对它们进行了赋值。
七、C++ new数组调用构造函数
class MyClass {
public:
MyClass(int n) {...}
~MyClass() {...}
};
MyClass* pArr = new MyClass[10]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
如果我们想要使用构造函数对数组中的元素进行初始化,可以使用大括号{}传递初始化参数。
八、new char数组
char* buffer = new char[256];
memset(buffer, 0, sizeof(char)*256);
C++还允许我们使用new[]来创建char类型的数组。上面的代码创建了一个有256个char类型元素的数组,并对它们进行了清空操作。
九、C++ new数组不够用再分配
int* arr = new int[10];
// 申请20个int型元素,并把原来数组的值复制过去
int* newArr = new int[20];
memcpy(newArr, arr, sizeof(int)*10);
delete[] arr; // 释放原来数组的内存
arr = newArr;
有时候,我们在程序运行时需要对已经创建的数组进行扩充,此时可以使用new[]创建新的数组,并把原来数组的元素复制到新数组中。