动态内存分布的问题

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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值