gpt4 book ai didi

c++ - 在没有 STL 的情况下在 C++ 中创建通用链表

转载 作者:行者123 更新时间:2023-11-28 05:32:31 25 4
gpt4 key购买 nike

有人可以帮助创建不使用 STLgeneric linkedlist 吗?我如何在 main 中声明 head。是 struct node<>* head 吗?或 struct node* head ?我在使用两者时都遇到了一个错误,就像模板声明不能出现在 block 范围内一样

#include <iostream>
using namespace std;


template<class T>
struct node
{
T data;
struct node<T>* next;
};

template<class T>
void Push(struct node<T>** H,T dat)
{
struct node<T> * newnode=(struct node<T> * )malloc(sizeof(struct node<T>)) ;
newnode->data=dat;
newnode->next=*H;
*H=newnode;

}


int main() {

struct node<>* head=NULL;
struct node<>* current;
int a=10;
float f=10.1;


Push<int>(&head,a);
Push<float>(&head,f);


current=head;
while(current)
{
cout<<current->data;
current=current->next;
}

//code
return 0;
}

最佳答案

首先,这是 C 和 C++ 风格编程的奇怪组合。但是让我们忽略它并专注于你真正的问题。您的主要问题是您在引用 node 时没有指定类型参数(使用时应该是 node<T>)。所以将第一位更改为:

template<class T>
struct node
{
T data;
struct node<T>* next;
};

template<class T>
void Push(struct node<T>** H,T dat) // <-- now we use node<T> everywhere
{
struct node<T> * newnode=(struct node<T> * )malloc(sizeof(struct node<T>)) ;
newnode->data=dat;
newnode->next=*H;
*H=newnode;

}

应该能带你去你想去的地方。在那里,您正确地将其称为 node<T>无处不在 Push .同样适用于 main() .现在malloc将工作,作为 node<T>确实有确定的大小。

也就是说,您会发现使用 node<T> *example = new node<T> 会更简洁一些和 delete example相反。

还有许多其他改进可以将其更多地转移到 C++ 领域,但我在这里只关注您的直接问题;稍后继续其余部分。

关于c++ - 在没有 STL 的情况下在 C++ 中创建通用链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39114022/

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