• CArray和CTypedPtrList的使用初步


    方法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和链表,自己研究去

  • 相关阅读:
    内网穿透访问Vue项目的时候出现Invalid Host header解决办法
    Java中的super关键字
    java中的Arrays工具类及排序和查找
    Java中方法的覆盖/重写
    java中的数组
    java的内部类概述
    matlab主成分分析PCA
    matlab多元线性回归
    matlab神经网络工具箱
    神经网络(三):前馈神经网络(FNN)
  • 原文地址:https://www.cnblogs.com/BIGFOOT/p/1351622.html
Copyright © 2020-2023  润新知