| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1195 人关注过本帖
标题:初学C++,关于数据结构的说明?
只看楼主 加入收藏
校草
Rank: 1
等 级:新手上路
帖 子:50
专家分:7
注 册:2017-3-15
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:1 
初学C++,关于数据结构的说明?
ListArray_id<Coord> gridlist;
这句声明是什么意思呢?
其中ListArray_id是个类吗?
程序代码:
template<class tdata> class ListArray_id {

    class Item {

    public:
        Item* pnext;
        Item* pprev;
        tdata object;
    };


private:
    Item** array;
    Item* pfirstitem;
    Item* plastitem;
    Item* pthisitem;
    unsigned int nseg;
    unsigned int id;
    unsigned int thisobj;

public:
    bool isobj;
    unsigned int nobj;

public:
    ListArray_id() {
        pfirstitem=NULL;
        plastitem=NULL;
        pthisitem=NULL;
        isobj=false;
        nobj=0;
        nseg=0;
        id=0;
    }

    void killall() {
        Item* pitem=pfirstitem;
        Item* pnext;
        while (pitem) {
            pnext=pitem->pnext;
            delete pitem;
            pitem=pnext;
        }
        if (nseg) delete[] array;
        pfirstitem=NULL;
        plastitem=NULL;
        pthisitem=NULL;
        isobj=false;
        nobj=0;
        nseg=0;
        id=0;
    }

    ~ListArray_id() {
        killall();
    }

    void initarray(unsigned int nitem) {
        unsigned int i;
        killall();
        if (nitem<=0) return;
        nseg=nitem%SEGSIZE;
        if (nseg*SEGSIZE<nitem) nseg++;
        array=new Item*[nseg*SEGSIZE];
        if (!array) fail();
        for (i=0;i<nitem;i++) createobj();
        pthisitem=0;
        thisobj=0;
    }

    tdata& createobj() {
        Item* pitem=new Item;
        if (!pitem) fail();
        pitem->object.id=id++;
        pitem->pprev=plastitem;
        pitem->pnext=NULL;
        if (plastitem) plastitem->pnext=pitem;
        else pfirstitem=pitem;
        plastitem=pitem;
        pthisitem=pitem;
        isobj=true;
        thisobj=nobj++;
        if (nobj>nseg*SEGSIZE) {
            Item** newarray=new Item*[(nseg+1)*SEGSIZE];
            if (!newarray) fail();
            if (nseg++) {
                unsigned int i;
                for (i=0;i<nobj-1;i++)
                    newarray[i]=array[i];
                delete[] array;
            }
            array=newarray;
        }
        array[nobj-1]=pitem;
        return pitem->object;
    }

    bool firstobj() {
        if (pfirstitem) {
            pthisitem=pfirstitem;
            isobj=true;
            thisobj=0;
            return true;
        }
        return false;
    }

    bool nextobj() {
        if (pthisitem) {
            pthisitem=pthisitem->pnext;
            thisobj++;
        }
        if (pthisitem) return true;
        isobj=false;
        return false;
    }

    tdata& getobj() {
        return pthisitem->object;
    }

    tdata& operator[](unsigned int i) {
        return array[i]->object;
    }

    void killobj() {
        unsigned int i;
        if (!pthisitem) return;
        if (pthisitem==pfirstitem) pfirstitem=pthisitem->pnext;
        if (pthisitem==plastitem) plastitem=pthisitem->pprev;
        Item* pnextitem=pthisitem->pnext;
        if (pthisitem->pprev) pthisitem->pprev->pnext=pthisitem->pnext;
        if (pthisitem->pnext) pthisitem->pnext->pprev=pthisitem->pprev;
        delete pthisitem;
        pthisitem=pnextitem;
        if (!pthisitem) isobj=false;
        for (i=thisobj+1;i<nobj;i++)
            array[i-1]=array[i];
        nobj--;
    }
};
coord应该是个结构体这个没错吧?
程序代码:
struct Coord {

    // Type for storing grid cell longitude, latitude and description text

    int id;
    double lon;
    double lat;
    xtring descrip;

};

2017-03-30 19:45
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:20 
模板类

建议你学会用标准的 std::list
然后自己学着写就不会烂得过分
2017-03-30 21:51
快速回复:初学C++,关于数据结构的说明?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015276 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved