[英]How should I format a namespace with all different linked lists?
我想使用一个库(例如“ single”和“ doubly”)创建一个非常简单的命名空间“ list”(类似于“ std”)。 我该如何对代码进行模块化,以便仅使用需要的变量(循环与非循环)?
我想我可以将“ struct node * prev”添加到列表使用的结构中,但是如果用户决定不进行循环,则它将始终为“ nullptr”,从而导致不必要的变量。 我想象的第二种方式是拥有两个不同的类...
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();
尽管这不是一项任务,也不是任何事情,但是当我需要创建一个链表时,我希望它成为我的首选。 最终,我想创建一个命名空间“树”,并进一步扩展它。 我几乎希望它像“字符串”抽象数据类型一样易于使用。
不可能
我撒谎了 创建一个包含数据的严格条件,然后创建继承数据的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字节)内存。 您可以使用struct A保存它,但是struct A有效地还有一个函数ptr / address,这会占用空间。 但是,这可以由编译器解决。 而且编写更差的代码需要更长的时间,并且总体效率会更差。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.