CList操作是不是很慢呀?
想要保存大量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;
}