C++:如何做一个链表,结构作为参数传递?

C++: How to do a linked list with struct passed as parameter?

本文关键字:结构 参数传递 链表 何做一 C++      更新时间:2023-10-16

所以我(大部分(理解带有指针的链表的概念。但是,我不确定如何能够创建在方法中传递的结构对象的链接列表。我是否需要另一个指针来指向结构上的指针? 我的结构包含指针:

// define a structure to hold bid information
struct Bid {
string bidId; // unique identifier
string title;
string fund;
double amount;
Bid *next;
Bid() {
amount = 0.0;
next = NULL;
}
};

我将结构对象传递给此方法以附加新的 Bid 结构:

void LinkedList::Append(Bid bid) {
// FIXME (3): Implement append logic
//reference bid being passed??? Bid struct has pointers, do we need another pointer?
Bid *currNode = &bid;
//set node's next pointer to NULL (end)
currNode->next = NULL;
//if list is empty
if (head == NULL) {
head = currNode;
tail = currNode;
}
else {
tail->next = currNode;
tail = currNode;
}
}

按值传递链表节点的问题在于它们会被复制。你可以设置一个指针来指向函数中的bid值,但这几乎肯定不是你想要的,因为它会在函数结束时消失,使指针悬空。链表节点几乎总是堆分配的,并通过指针传递,因为您可以手动控制堆分配对象的生存期(这在这里是必不可少的(。

现在,从OO的角度来看,这有点问题在于您的Bid类违反了单一责任原则(SRP(,因为它既是有关投标的具体信息的存储,又是将某些投标链接在一起的参与者。这是您很少在 OO 语言中看到侵入性容器的原因之一。根据您的确切用例,最好将无指针Bid存储在将执行链接的BidNode中。如果这样做,则可以按值传递Bid,并将其复制到堆分配的BidNode中。或者,当然,您可以只使用std::list.