从链表中访问对象(自定义实现)

时间:2014-01-12 17:13:56

标签: c++ object linked-list cout

当使用存储大量对象的链表时,您将如何访问所述对象内的数据?

示例代码。

using namespace std;

typedef struct node                                                
{                                                               
  int data;               
  node* next;             
} *nodePtr;

nodePtr head;
nodePtr current;
nodePtr temp;

void PrintList()
{
    current = head;
    while(current != NULL)
    {
        cout << current->data.getMakeModel();
        cout << current->data.getRegNo();
        cout << current->data.getEngineSize();
        cout << current->data.getRented();

        current=current->next;
    }
}

我目前的做法不起作用,我不知道如何解决它。

我需要做的就是访问我有getter方法的模板对象数据成员并输出数据。

有什么想法吗?

另外,是否可以在链表中搜索特定对象(具有特定数据成员值的对象)?当然对象仍然使用模板

2 个答案:

答案 0 :(得分:0)

这里的探测是data类型为int而不是类类型。您必须将其类型更改为类类型,例如Foo。更高级的解决方案将使用模板使其适用于任意类型(例如std::list


另请注意,您的类定义不被视为好样式。我将其定义为:

struct node                                                
{   
    typedef node* Ptr;

    Foo data;               
    node* next;             
};

虽然typedef在某些特殊情况下是合理的(例如,如果广泛使用智能指针和引用计数)。在正常情况下,应该使用node*(也是更小的o.O)

答案 1 :(得分:0)

  

当使用存储大量对象的链表时,您将如何访问所述对象内的数据?

如果您有nodePtr,则必须ptr->data才能访问结构的int


  

我目前的做法不起作用,我不知道如何解决它。

您正尝试访问类型为int的对象上没有任何内容的成员函数。您可能需要为data的{​​{1}}成员对象定义另一种类型。


  

在旁注中,是否可以在链表中搜索特定对象(具有特定数据成员值的对象)?

当然,这种算法的实现非常简单。您可以按照以下方式实现它:

node

我建议使用标准nodePtr find(nodePtr head, int value) { for (; head != NULL; head = head->next) if (*head == value) return first; return NULL; } std::forward_list。如果这样做,您将能够使用std::list作为“查找”算法。