c语言中我们使用malloc和free,malloc直接开辟出一块空间,并不会为对象初始化,返回一个void*类型的指针。
c++中我们使用new和delete, new创造对象,先申请内存,然后使用类的构造函数来初始化对象,delete先调用析构函数,然后释放,返回我们所创建对象类型的指针
int*point;
point=new int(2);
delete point;
动态分配了用于存放int类型数据的内存空间,并将初值2存入该空间中,然后将首地址赋给指针point
int*point=new int;省略括号的形式
int*point=new int() 保留括号,但括号中不写任何数值,则表示用0对该对象初始化
delete point;
创建数组类型的对象
int *p=new int[10];数组中10个元素全为0,不加括号的话值是随机的
delete []p;
用new分配的内存,必须用delete加以释放,否则会导致动态分配的内存无法回收,使得程序占据的内存越来越大,也就是我们所说的“内存泄漏”
用vector创建数组对象
vector <元素类型>数组对象名(数组长度)
数组长度是一个表达式,表达式中可以包含变量。例如下面定义了一个大小为10的int型动态数组a
int x=10;
vector<int>a(x);
vector定义的数组对象具有一个重要的成员函数size(),它会返回数组的大小
例如
#include
#include
using namespace std;
double average(const vector&arr)
{
double sum=0;
for(int i=0;i<arr.size();i++)
sum+=arr[i];
return sum/arr.size();
}
int main()
{
int n;
cout<<“n=”;
cin>>n;
vectorarr(n);
cout<<“Please input”<<n<<“real numbers:”<<endl;
for(int i=0;i<n;i++)
cin>>arr[i];
cout<<“Ayerage=”<<average(arr)<<endl;
return 0;
}