[英]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.