CArrary SetSize及数组一些使用发现

CArray 使用不当会产生内存碎片,应先调用SetSize(),但具体怎么用还不是太清楚,先看代码:

运行结果:

1, 0x2bcf58, 0x2bcf98,  2
2, 0x2b9e78, 0x2b9e78,  2
3, 0x2b9ec0, 0x2b9ec0, 80

从以上结果看出,第一种方法未用SetSize是错的,执行arr1.Add( 2 )时会重新给第一项分配内存,内存地址变了(0x2bcf58, 0x2bcf98),第二、三种方法正确,添加元素时,不重新分配内存,内存地址不变。
 

1.SetSize(INT_PTR nNewSize, INT_PTR nGrowBy)并不预分配内存,在第一次执行Add或InsertAt时分配nGrowBy内存,用完时再分配nGrowBy内存。

2. RemoveAll将销毁已经分配的内存,下次调用Add时再分配。如果频繁清除时请使用RemoveAt,不会重新分配内存。

3.setsize(100,100)之后直接用add就会从101开始存,除非用removeall之后再用add,或者用setat

4.动态实现二维数组

	//CArray <int,int&> m_ArrayRecordSpeed1[10];
	//for(int i=0;i<10;i++)
	//{
	//	m_ArrayRecordSpeed1[i].SetSize(100,-1);//此句
	//}
	//for(int i=0;i<10;i++)
	//{
	//	m_ArrayRecordSpeed1[i].RemoveAll();//此句
	//}
	//for(int i=0;i<10;i++)
	//{
	//	m_ArrayRecordSpeed1[i].Add(i);
	//}
	//for(int i=0;i<10;i++)
	//{
	//	CString str;
	//	str.Format(_T("%d"),m_ArrayRecordSpeed1[i].GetAt(0));
	//	MessageBox(str);
	//}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值