📄 dataitem.cpp
字号:
#include "StdAfx.h"
#include ".\dataitem.h"
#include "formatstr.h"
CDataItem::CDataItem(void)
{
m_nClassId = INVALID_CLASSID;
}
CDataItem::CDataItem(int nDimension, int nClassId)
{
m_nClassId = nClassId;
m_Elements.resize(nDimension); //预留数据项空间
}
////拷贝构造函数
//CDataItem::CDataItem(CDataItem &item)
//{
// m_nClassId = item.ClassID();
// m_Elements.resize(item.Dimension());
// for(int i=0; i<item.Dimension(); i++)
// m_Elements[i] = item[i];
//}
CDataItem::~CDataItem(void)
{
}
//从字符串加载数据(为了输入)
//sDataLine格式: 第一项为分类,后面为各维数据
void CDataItem::FromString(char* sDataLine)
{
//清空原有数据
m_Elements.clear();
m_nClassId = INVALID_CLASSID;
//分解字符串, 加载新的数据
char *sSub;
bool bFirst = true;
while(*sDataLine)
{
sSub = GetSubStr(sDataLine, ',', 0, 0); //GetSubStr: 在formatstr.cpp中定义
if (bFirst)
{
m_nClassId = atoi(sSub);
bFirst = false;
}
else
m_Elements.push_back(atof(sSub));
}
}
//转换为字符串表示(为了输出)
CString CDataItem::ToString()
{
CString sResult, sTmp;
sResult.Format("%d,", m_nClassId);
for(int i=0; i<m_Elements.size(); i++)
{
sTmp.Format("%f,", m_Elements[i]);
sResult += sTmp;
}
sResult = sResult.Left(sResult.GetLength()-1);
return sResult;
}
inline double& CDataItem::GetAt(int nIndex)
{
return m_Elements.at(nIndex);
}
//重载[]操作符,用于存取m_Elements中的各项数据
inline double& CDataItem::operator [] (int nIndex)
{
return m_Elements.at(nIndex);
}
void CDataItem::operator += (CDataItem& item)
{
if (Dimension() != item.Dimension())
return;
for(int i=0; i<item.Dimension(); i++)
m_Elements[i] += item[i];
}
void CDataItem::operator -= (CDataItem& item)
{
if (Dimension() != item.Dimension())
return;
for(int i=0; i<item.Dimension(); i++)
m_Elements[i] -= item[i];
}
void CDataItem::operator /= (double d)
{
for(int i=0; i<Dimension(); i++)
m_Elements[i] /= d;
}
void CDataItem::operator *= (double d)
{
for(int i=0; i<Dimension(); i++)
m_Elements[i] *= d;
}
//计算与anotherData的欧几里得距离
#include <math.h>
double CDataItem::DistanceFrom(CDataItem &anotherData)
{
double d = 0;
for (int i=0; i<Dimension(); i++)
d += (m_Elements[i]-anotherData[i])*(m_Elements[i]-anotherData[i]);
return pow(d, 0.5);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -