使用get函数访问存储在节点中的数据

时间:2013-10-16 15:15:56

标签: c++ encapsulation doubly-linked-list

我已经实现了我自己的双链表,它有模板化的节点。通过这个节点,我已经存储了我自己的对象(Play),它已经得到了连接,我已经为我的列表创建了一个迭代器。

for(DLL<Play>::iterator itr=PlayList.begin(); itr!=PlayList.end(); itr++)
                if(offense==*how do I access this*getoTeam()){

这是我的节点和迭代器代码:

template<class T>
class node{
    public:
    T data;
    node *next, *prev;
    node(const T& t, node<T> *n = 0, node<T> *p = 0) {data=t; next=n; prev=p;}
    node() {next = prev = 0;}
};

template<typename T>
class Iterator{
    public:
        Iterator(node<T> *np=0) : nodePtr(np) {}

        T& operator*() const {return nodePtr->data;}

        Iterator<T> &operator++(){
            nodePtr = nodePtr->next;
            return *this;
        }

        Iterator<T> operator++(int){
            Iterator<T> Temp(nodePtr);
            nodePtr = nodePtr->next;
            return Temp;
        }

        bool operator==(Iterator<T> i) { return nodePtr == i.nodePtr; }
        bool operator!=(Iterator<T> i) { return nodePtr != i.nodePtr; }

    private:
        node<T> * nodePtr;
};

我不知道我会把它放在哪里如何访问。如果你能解释原因,我会很感激。

感谢。

只是来,这是我的Play对象:

#ifndef PLAY_H_INCLUDED
#define PLAY_H_INCLUDED
#include <string>

class Play
{
private:
    int m_quarter;
    int m_minutes;
    std::string oTeam;
    std::string dTeam;
    int m_down;
    int m_yardToGO;
    int m_startLoc;
    int playDesc;
    std::string wholePlay;
public:
    int getQuarter();
    int getMinutes();
    std::string getoTeam();
    std::string getdTeam();
    int getDown();
    int getYard();
    int getStartLoc();
    int getPlayDesc();
    std::string getwholePlay();
    Play(int quarter, int minutes, std::string offense, std::string defense, int dwn, int ytg, int start, int desc, std::string play);
    ~Play();
    Play parse(std::string toParse);
    std::string findPlay(std::string playDesc);
};

#endif // PLAY_H_INCLUDED

1 个答案:

答案 0 :(得分:1)

假设itr的类型为Iterator<Play>,请使用offense == (*itr).getoTeam()

*itr调用Iterator<Play>::operator*()返回Play&,然后您可以调用getoTeam()。为了保持一致性,您还应该实现

T* Iterator::operator->() {return &nodePtr->data;}

这样,您可以使用更熟悉的符号offense == itr->getoTeam()