2014-10-20 36 views
1

作爲二叉樹和鄰接表的經典指針表示法的替代方法,在C++中使用STL實現圖和樹是一種很好的方法,以使其成爲動態的並最大限度地減少內存泄漏和段錯誤。什麼是在C++中使用STL實現圖和樹的好方法?

一種這樣的實現鄰接列表的我發現了通過使用STL列表<>在結構內部,

struct Node { 
    int data; 
    list<int> adj; 
}; 

然後聲明結構指針

struct Node *nodes[10005]; 

的陣列,但是,這一切都是考慮整數數據,如果要存儲的數據不是整數,如何在最大潛能下使用STL?

+0

*「以便使其動態化並最大限度地減少內存泄漏和段錯誤」* ... *「,然後聲明一個結構指針數組」*「。如果你正在尋找動態大小和安全的段錯誤,一個靜態大小的原始數組肯定不是要走的路。 – CoryKramer 2014-10-20 16:53:14

+0

'如果要存儲的數據不是整數' - 使用模板。我不知道你將如何編寫你的數據結構,但是一個節點向量可能比任意數量的固定數組要好。 – 2014-10-20 16:53:26

回答

1

使用模板類 例如

template<class t1> 
class node 
{ 
public: 
    t1 value; 
    node * link; 
    void getdata(t1 val) 
     { 
     value=val; 
     } 
}; 

現在你可以處理任何類型的數據

0

的這大大取決於什麼將這樣的結構來完成。讓我們先從你的第二個問題 - 使用任何類型,應用模板

template<class T> 
class Node 
{ 
public: 
    T value; 
    std::list<int> nodeIndices; 
} 

struct Node *nodes[10005]; 

如果你想在一個單一的圖形結構來使用不同類型的,具有繼承

class BaseNode 
{ 
public: 
    std::list<int> nodeIndices; 
    // some functions 
}; 

template<class T> 
class Node : public BaseNode 
{ 
public: 
    T value; 
} 

struct BaseNode *nodes[10005]; 

這種方式,您可以存儲上面的結合不同類型的對象。另一種說法可能是使用std :: array而不是經典數組。

相關問題