gpt4 book ai didi

c++ - 我应该如何使用所有不同的链表格式化命名空间?

转载 作者:行者123 更新时间:2023-12-04 17:06:25 24 4
gpt4 key购买 nike

我想制作一个非常简单的命名空间“list”,类似于“std”,带有“singly”和“double”之类的库。如何模块化代码以便我只能使用我需要的变量(圆形与非圆形)?

我想我可以在列表使用的结构中添加一个 'struct node* prev',但是如果用户决定不做循环,它总是会导致 'nullptr' 导致不必要的变量。我想象的第二种方式是有 2 个不同的类......

namespace list{
struct snode{
int data;
struct snode* next;
};

class singly{
public:
singly();
singly(unsigned long long amount=0, bool circular=0, bool userCreated=0, bool empty=0);
~singly();

void create(unsigned long long amount=0, bool circular=0, bool userCreated=0, bool empty=0);
void display();
void destroy();
private:
snode* HEAD;
unsigned long long amount;

bool empty;
bool circular;
snode* TAIL;
};
}

我希望使用此命名空间执行以下操作..
include "singly.h"

using namespace list;

singly list;

list.create(5);

list.display();

list.destroy();

或者不使用命名空间其他东西......
list::singly list(7, 1, 0, 1);

list.display();

list.~list();

虽然这不是一项任务或任何事情,但当我需要在我的生活中创建一个链表时,我希望它成为我的首选。最终,我想创建一个命名空间“树”并进一步扩展。我几乎希望它像“字符串”抽象数据类型一样易于使用。

最佳答案

简答

不可能

长答案

我撒了谎(ish)。
创建一个包含数据的base strict,然后创建继承数据的snode,实现基类的指针。在查看列表时检查它是否失败。

struct A {
int data;
// make it polymorphic for the conversion
virtual void function() {return;}
};

struct B : A {
struct A* next;
};

int main()
{
struct A end;
struct B beginning;
beginning.next = &end;
struct B* buffer = &beginning;
while(true) {
buffer = dynamic_cast<struct B*>(buffer->next);
if (buffer == nullptr) break;
}
}

为什么这无关紧要

每个列表最多只能节省(0 个字节)的内存。
您使用结构 A 保存它,但结构 A 实际上还有一个函数 ptr/address ,它占用空间。然而,这可能由编译器修复。并且编写更糟糕的代码需要更长的时间,整体效率也会更差。

关于c++ - 我应该如何使用所有不同的链表格式化命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53899688/

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