方法1:使用CArray
定义:
class test : public CObject
{
public:
CString m_strName;
char m_cAddress[80];
int m_iAge;
public:
test();
test& operator=( const test& cSrc);
};
test::test() //构造函数
test& test::operator= ( const test& cSrc) // 重载=操作
{
m_cAddress = cSrc.m_cAddress;
m_iAge = cSrc.m_iAge;
m_strName = cSrc.m_strName;
}
使用方法:
CArray<test,test&> carr_test;
test ctest;
ctest.m_strName = "panqy";
ctest.m_cAddress = "hangzhou";
ctest.m_iAge = 25;
carr_test.Add(ctest);
说明:
class 中用来存放一行数据,一个类对象ctest一行。
carr_test除了Add还有很多方法,比如 Delete,Append,
GetCount,等等,自己去查MSDN。
//////////////////////////////////////////////////////////////////////////////////////
方法2:使用VC++自带的容器,其实上面的CArray是一个动态数组
template<class_BASE_CLASS,TYPE>
class CTypedPtrList:public BASE_CLASS
定义:
class CTest : public CObject
{
public:
CTest();
CTest(CString strFileName,CString strUpdateTime = _T(""));
virtual ~CTest();
CString m_strFileName;
CString m_strUpdateTime;
};
CTest::CTest()
{
m_strFileName = "";
m_strUpdateTime = "";
};
CTest(CString strFileName,CString strUpdateTime = _T(""))
{
m_strFileName = strFileName;
m_strUpdateTime = strUpdateTime;
}
CTypedPtrList<CObList,CTest*> m_TestList;
使用:
CTest* ctest;
CString strFileName = "E:\\test.txt";
CString strTime = "20081209100922";
ctest = new CTest(strFileName,strTime);
m_TestList.AddTail(ctest);
取数据,如果容器里有10个对象,取第5个
(CTest*)m_TestList.GetAt(m_TestList.FindIndex(4))->m_strFileName;
说明:
m_TestList是一个容器(CTypedPtrList)一个对象,继承自CObject,
里面存放的是类CTest的对象。
具体来说,一行数据一个类对象,然后循环放入容器。
关于m_TestList的操作,查CTypedPtrList就知道了。给你一个我写的
容器冒泡排序
if (!m_TestList.IsEmpty()) {
POSITION pos;
POSITION PosIndex1;
POSITION PosIndex2;
CTest* pFirst;
CTest* pSecond;
CTest* pTemp;
BOOL bSwiched;
int nCount = m_TestList.GetCount(); // 取得容器中对象的个数,相当于有几行数据
for (int i=0; i<nCount-1; i++) {
pos = m_TestList.GetHeadPosition();
pFirst = m_TestList.GetNext(pos);
bSwiched = FALSE;
for (int j=0; j<(nCount-1-i); j++) {
pSecond = m_TestList.GetNext(pos);
if (IsNeedSwitch(pFirst, pSecond)) { // IsNeedSwitch是一个子函数,判断前后2个对象是否需要交换,TRUE--交换
bSwiched = TRUE;
PosIndex1 = m_TestList.FindIndex(j);
pTemp = (CTest*)m_TestList.GetAt(PosIndex1);
PosIndex2 = m_TestList.FindIndex(j+1);
m_TestList.SetAt(PosIndex1,m_TestList.GetAt(PosIndex2));
m_TestList.SetAt(PosIndex2,pTemp);
pFirst = m_TestList.GetAt(m_TestList.FindIndex(j+1));
} else {
pFirst = pSecond;
}
}
if (!bSwiched) {
break;
}
}
}
方法3:使用struct和链表,自己研究去