CList<CPoint,CPoint&> listPoint;
for (int i = 0; i < 500000; i ++)
{
listPoint.AddTail(CPoint(i,i));
} listPoint.RemoveAll(); 本人程序中用到大量数据,但是我用的是Clist存储,因为设计到修改插入某个数据,但是有时候又要清空链表,所以就用RemoveAll()函数,但是发现RemoveAll()函数速度很慢,例如上面的程序要四五秒的时间,那位有自己写的链表速度比较快的,并且使用上和clist一样给我发一个,不胜感激!邮箱[email protected]
for (int i = 0; i < 500000; i ++)
{
listPoint.AddTail(CPoint(i,i));
} listPoint.RemoveAll(); 本人程序中用到大量数据,但是我用的是Clist存储,因为设计到修改插入某个数据,但是有时候又要清空链表,所以就用RemoveAll()函数,但是发现RemoveAll()函数速度很慢,例如上面的程序要四五秒的时间,那位有自己写的链表速度比较快的,并且使用上和clist一样给我发一个,不胜感激!邮箱[email protected]
解决方案 »
- 和WebServer通讯
- switch语句不会写,请帮忙,在线等。。。。
- 来许个愿吧
- 请问如何在标题栏中绘图,并把关闭按钮替换成自己想要的样式,就像MSN Explorer那样,最主要是如何给按钮添加事件.
- 我要学习 WIN 下的汇编,从哪里开始呀,什么书好!(DOS下的刚学完)
- 大家帮我看看,为什么会崩溃?
- windows seh 如何处理线程锁的问题
- 如何获得股市行情的数据?????问了几个,还是不知所云,只有关注!
- 急急急!!如何把时间精确到毫秒
- 如何共享NT的文件夹并设置访问权限
- VC++与数据库:我想把别人传递过来的数据及图片保存在电脑
- 今天发现 codeproject 无法打开了,有人遇到过没
CList以链表的方式存储节点,因此插入和删除只需维护链表信息,而无需移动数据,但是寻址比较繁琐
CArray是以块方式存储节点,就类似于数组,寻址和全部释放的操作非常快,但是插入和删除将产生比较大的数量搬移问题,提高CArray插入的效率的方式就是先分配一个较大的空间,然后再操作可以对比下运行速度 {
CArray<POINT,POINT&> listPoint;
listPoint.SetSize(500000);
DWORD dw1, dw2, dw3;
dw1 = GetTickCount();
for (int i = 0; i < 500000; i ++)
{
POINT pt ={i, i};
listPoint[i] = pt;
}
dw2 = GetTickCount();
listPoint.RemoveAll();
dw3 = GetTickCount(); TRACE(_T("T1=%ld T2=%ld\n"), dw2-dw1, dw3-dw2);
}
dw1 = GetTickCount();
CList<CPoint,CPoint&> listPoint;
for (int i = 0; i < 500000; i ++)
{
listPoint.AddTail(CPoint(i,i));
}
dw2 = GetTickCount();
listPoint.RemoveAll()
dw3 = GetTickCount();
TRACE(_T("T1=%ld T2=%ld\n"), dw2-dw1, dw3-dw2);
结果T1=328 T2=4195于是我大概看了一下CList的实现代码,它插入的时候一次分配10个单元,这样后续的9个节点插入速度就很快, 而删除则是逐个进行的