【问题标题】:Trouble with own C++ list class implementation (insert function)自己的 C++ 列表类实现有问题(插入函数)
【发布时间】:2019-12-05 06:44:13
【问题描述】:

我即将实现我自己的基本数据结构。这是一类列表。我正在努力修复 insert(int data) 。

想法:每个元素都有一个值和3个指针: pointer1: head: 指向头部单元格 pointer2: current: 指向当前单元格 pointer3: next: 指向相邻元素的结构

每当我们将新元素放入列表时,我已经尝试过 next = &date。 在此处输入代码`

  class list{
  private:
      typedef struct element{
          int wert;
          element *next;};
          element *current;
          element *head;
  public://constructur. 
      list()
          {head=new element; current=head; head->next=0;}

/*A new element with value is beeing inserted */

void insert (int value){
    next= &value;} 
};

【问题讨论】:

  • 请记住,如果您使用new 进行分配,您将负责对应的delete
  • 在 C++ 中使用 nullptr 而不是 NULL 之类的旧东西,或者更糟的是 0
  • 提示:使用newvalue 转换为element*。您正在尝试将int* 分配给element*。这个链表也缺少放置实际值的地方。
  • 您的班级中没有next 成员。您不清楚这个明显的编译错误到底是什么?
  • 当您得到执行此操作的指令时,您是否也获得了调试它的工具?如果您不采取预防措施,这可能会严重损坏。

标签: c++ list insert compile-time-constant


【解决方案1】:

您将列表结构与节点结构混合在一起。对于列表,您需要这样的内容:

class list { 
    node* head;
}

那么对于列表中你需要的笔记

class node {
    element* currentData;
    node* next;
}

所以这里的节点构成了列表结构,而存储在列表中的数据具有“元素”类型。

【讨论】:

  • 为什么我需要使用两个不同的类?
  • 只有一个列表。但是列表中的每个元素都有一个节点。它们不能是同一类型。
  • PS 如果列表包含整数,那么您可以将“element * currentData”替换为“int current Data”
  • PPS 为什么投反对票?对我来说似乎是一个直截了当的答案--
  • 您所建议的提问者已经完成了。问题中有两个类:listelement,其中listelements 的链。这使得这个答案没有用。
【解决方案2】:
 void insert (int value){
    struct element* new_node = (struct element*) malloc(sizeof(struct element));
    new_node->wert = value;
    new_node->next = head;
    head = new_node;
    }

现在可以了。

【讨论】:

  • 注意:struct element* new_node = (struct element*) malloc(sizeof(struct element)); 可以是 element* new_node = new element; 更简单,并为您捕获当前未检查的内存分配错误。一般来说,在 C++ 中,new 优于 mallocwhere possible don't use either。链表是我认为new 适合的地方之一,但list 类需要足够智能以确保正确执行清理。
猜你喜欢
  • 1970-01-01
  • 2013-01-29
  • 2021-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-09
  • 2022-10-04
  • 2011-01-11
相关资源
最近更新 更多