C ++:如何用结构作为参数传递链表?

时间:2018-09-22 13:53:08

标签: c++ data-structures linked-list

因此,我了解(大多数情况下)带有指针的链表的概念。但是,我不确定如何创建在方法中传递的struct对象的链表。我是否需要另一个指针来指向结构上的指针? 我的结构包含指针:

while ($row = $resulto->fetch_assoc()) {


  $memb2 = $row['memb'];

    // second line member sel.

    $resulto2 = $mysqli->query("SELECT * FROM users WHERE tab3='$memb2' ") or die($mysqli->error());
    //pokud druhá linie
    if ($resulto2->num_rows > 0) {

        while ($row2 = $resulto2->fetch_assoc()) {

           $memb3 = $row2['memb'];


        } // should be 3. line
        // get numbers from 2. line
        $resulto2 = $mysqli->query("SELECT * FROM users WHERE tab3='$memb2' ") or die($mysqli->error());

        $d = 0;
        $rows2 = array();
        $rows3c = array();
        while ($rowd = $resulto2->fetch_array()) {
            array_push($rows2, $rowd['obrat']);
            array_push($rows3c, $rowd['history']);

        }

        $array2 = array_sum($rows2);
        $count3 = array_sum($rows3c);

    }

}

//end / get values first line
$resulto = $mysqli->query("SELECT * FROM users WHERE tab3='$memb' ") or die($mysqli->error());

$d = 0;
$rows = array();
$rows2c = array();

while ($rowd = $resulto->fetch_array()) {
    array_push($rows, $rowd['obrat']);
    array_push($rows2c, $rowd['history']);

}
$array = array_sum($rows);
$count2 = array_sum($rows2c);

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

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

1 个答案:

答案 0 :(得分:2)

按值传递链接列表节点的问题是它们被复制了。您可以在函数中设置一个指向bid值的指针,但这几乎肯定不是您想要的,因为它将在函数末尾消失,使指针悬空。链接列表节点实际上始终是堆分配的,并通过指针传递,因为您可以手动控制堆分配的对象的生存期(这在这里很重要)。

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