当使用存储大量对象的链表时,您将如何访问所述对象内的数据?
示例代码。
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方法的模板对象数据成员并输出数据。
有什么想法吗?
另外,是否可以在链表中搜索特定对象(具有特定数据成员值的对象)?当然对象仍然使用模板
答案 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
作为“查找”算法。