gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:20:55 25 4
gpt4 key购买 nike

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

// 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

关于C++:如何做一个链表与结构作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52457320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com