您的位置:首页 > 其它

CArray和CTypedPtrList的使用初步

2016-01-05 18:27 127 查看
方法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和链表,自己研究去
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: