【问题标题】:Does the following function and function call insert "seat" after "driver_seat"以下函数和函数调用是否在“driver_seat”之后插入“seat”
【发布时间】:2021-11-29 14:24:00
【问题描述】:

我对 C++ 编程比较陌生,我正在为我的一门课程做一个复杂的项目。我需要知道我对函数 insertAfter 的定义是否按预期工作以及我是否正确使用它。

void SeatNode::insertAfter(SeatNode* node)
{
    // insert this->SeatNode after node
    this->next_node = node->next_node;
    node->next_node = this->next_node;
}

void Compact::createSeatReservation(Passenger p)
{
    SeatNode seat(p);
    seat.insertAfter(this->driver_seat.getNextNode());
}

如果它按预期工作,Compact::createSeatReservation(Passenger p) 应该创建一个名为 seat 的 SeatNode 对象,并且它应该在一个名为 driver_seat 的 SeatNode 对象之后插入 seat。形成以driver_seat为头节点,seat为driver_seat之后的下一个节点的链表。正如我所说,我对 c++ 比较陌生,任何帮助将不胜感激。

【问题讨论】:

  • 不,它没有。在你的脑海中通过它。考虑三个节点,您的driver_seat 节点、driver_seats 下一个节点和您新创建的节点。每个next 指向哪里,应该指向哪里?

标签: c++ function object pointers


【解决方案1】:

不,它没有。我会从你调用 insertAfter() 的地方开始一步一步地完成它:

  1. 您将座位的下一个指针更改为驾驶员后面的指针,到目前为止一切顺利。
  2. 您将驱动程序的下一个指针更改为座位的下一个指针,即您在步骤 1 中更改为驱动程序之后的指针,因此此分配不会改变任何内容。

您在第二个作业中要做的是将驾驶员的 next 指针更改为新插入的座位,您可以这样做: node->next_node = this;

createSeatReservation() 方法内部还有一个问题:当您在 driver 之后的节点调用 insertAfter() 时,新座位将插入到本身位于 driver 之后的座位之后。这里正确的行是: seat.insertAfter(this->driver_seat);

所以完整正确的代码是

void SeatNode::insertAfter(SeatNode* node)
{
    // insert this->SeatNode after node
    this->next_node = node->next_node;
    node->next_node = this;
}

void Compact::createSeatReservation(Passenger p)
{
    SeatNode seat(p);
    seat.insertAfter(this->driver_seat);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 2016-11-23
    • 2015-01-06
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多