实现的ATL(AtlSimpleArray)数组任意插入辅助函数

前言:

   最近在写树中用到了数组,ATL中的 AtlSimpleArray 这个类封装了一个简单数组,简单高效。

正因为简单,没有带插入数据功能, 下面是我实现的一个函数,任意位置插入。 两句内存操用。 这样做有一个不好的地方是,容易产生内存碎片。 所以如果操作非常非常多 就要用List了。


look source

#include "stdafx.h"

#include <atlcoll.h>

class DemoClass

{

public:

DemoClass(int num)

{

m_num = num;

}

~DemoClass()

{

printf("析构%d\n", m_num);

}

int m_num;

};


int _tmain(int argc, _TCHAR* argv[])

{

CSimpleArray<DemoClass*> arrys;

for (int i = 0; i < 400; i ++)

{

arrys.Add(new DemoClass(i));

}

int iIndex = 4;

/

if( ++arrys.m_nSize >= arrys.m_nAllocSize)

{

DemoClass** aT;

int nNewAllocSize = (arrys.m_nAllocSize == 0) ? 1 : (arrys.m_nSize * 2);

if (nNewAllocSize<0||nNewAllocSize>INT_MAX/sizeof(DemoClass*))

{

return FALSE;

}

aT = (DemoClass**)_recalloc(arrys.m_aT, nNewAllocSize, sizeof(DemoClass*));

if(aT == NULL)

return FALSE;

arrys.m_nAllocSize = nNewAllocSize;

arrys.m_aT = aT;


}

if (arrys.m_aT)//not null

{

memmove(&arrys.m_aT[iIndex + 1], &arrys.m_aT[iIndex], (arrys.m_nSize - iIndex - 1) * sizeof(DemoClass*));

// 5在3处插入 移动 345 

//

//

// 5插入

//  0 1 2 3 ^ 4 5 6 7 8 9 

//

}

//arrys.m_aT[iIndex] = new DemoClass(88888);

DemoClass* bbc = new DemoClass(88888);

arrys.SetAtIndex(iIndex, bbc);

int j = 0;

while(j < arrys.GetSize())

{

printf("%d\n", arrys[j]->m_num);

j++;

}

printf("%d\n", arrys.GetSize());

return 0;

}


转载于:https://www.cnblogs.com/satng/archive/2011/07/21/2138789.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值