CList操作是不是很慢呀?

oceanslan 2005-09-13 10:18:00
想要保存大量3维点的数据(x,y,z)在一个类中,用了两种方法实现:
class A
{
public:
CList<double,double> m_lstCurveDataXYZ;
}

另一种:
class A
{
public:
double* m_pPointsXValue; //to keep all points X coordinate
double* m_pPointsYValue; //to keep all points Y coordinate
double* m_pPointsZValue; //to keep all points Z coordinate

}

结果发现用CList实现时速度慢的要死,因为通常都要不存上千到万个点。是否使用CList的时候数据访问通常都很慢,不知道它里面是如何操作数据的,因为我要用指针实现的话,访问其中第i个数据我可以直接实现:
db3DX = pLineData->m_pPointsXValue[i];
db3DY = pLineData->m_pPointsYValue[i];
db3DZ = pLineData->m_pPointsZValue[i];
盼高手解惑?

另外如果使用指针实现的时候,如果要频繁删除其中的点,速度也很慢,有没有更简单的方法,我的方法是:
BOOL C3DCurve::DeletePoint(int nIndex)
{
if (nIndex >= m_nPointNum)
return FALSE;

double* m_pTempX;
double* m_pTempY;
double* m_pTempZ;

m_pTempX = new double[m_nPointNum -1];
m_pTempY = new double[m_nPointNum -1];
m_pTempZ = new double[m_nPointNum -1];

int j = 0;
for(int i = 0 ; i < m_nPointNum; i++)
{
if (i != nIndex)
{
m_pTempX[j] = m_pPointsXValue[i];
m_pTempY[j] = m_pPointsYValue[i];
m_pTempZ[j] = m_pPointsZValue[i];
j++;
}
}

delete[] m_pPointsXValue;
delete[] m_pPointsYValue;
delete[] m_pPointsZValue;

m_pPointsXValue = m_pTempX;
m_pPointsYValue = m_pTempY;
m_pPointsZValue = m_pTempZ;

m_nPointNum = m_nPointNum -1;

return TRUE;
}
...全文
177 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
vcmute 2005-12-01
  • 打赏
  • 举报
回复
use memmove
oyljerry 2005-12-01
  • 打赏
  • 举报
回复
链表访问比较慢,用CArray等或vector访问快,不过频繁存取比较效率低
gmlan1978 2005-12-01
  • 打赏
  • 举报
回复
仔细弄清楚CMap,CList,CArray的区别
phoenix96_2000 2005-09-13
  • 打赏
  • 举报
回复
链表访问效率为 O(n),当然很慢了

看你的应用中来选择,
随机访问,用CArray std:vector
插入删除频繁, CList std:list
折中的话,CMap,std:map,std:set的插入和访问效率都是O(logn),但是空间会浪费得多

oceanslan 2005-09-13
  • 打赏
  • 举报
回复
pomelowu(羽战士):
CList好像在不空的情况下效率比较高
~~啥叫不空呀??
快乐鹦鹉 2005-09-13
  • 打赏
  • 举报
回复
CList的特点是插入快(插入任意位置的速度比CArray和CMap快),但查询效率较差。
Element insertion is very fast at the list head, at the tail, and at a known POSITION. A sequential search is necessary to look up an element by value or index. This search can be slow if the list is long.

pomelowu 2005-09-13
  • 打赏
  • 举报
回复
CList好像在不空的情况下效率比较高

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧