2010-11-06 43 views
0

這個問題有點難以描述,所以如果不清楚,請耐心等待。共享單個變量的列表?

我想實現一個單一的,普遍可訪問[到裏面的物品]頭,尾和Iter項目指針一個雙向鏈表 - 這樣可大大減少開銷的內存和處理/訪問時間...

靜態差不多履行這個角色 - 除了它共享所有類相同的類 - 這是我不想要的(因爲我可能有多個雙向鏈表 - 我需要每個列表一個,而不是每個類一個]。所以我需要的是類似於靜態的東西,除了它被本地化爲不同的聲明。

頭部/節點方法變得複雜(特別是因爲它使用模板),我想不惜一切代價避免這種情況。 Head只是具有Node [Node所以可以訪問]的重複函數,這看起來浪費並且增加了複雜度,只是爲了具有三個局部通用變量。

我想什麼是類似於此:

class Test 
{ 
private: 
    static Test *Head; //Single universal declaration! 
    static Test *End; 
    static Test *Iter; 
//etc etc 
}; 

除...

Test A; //Set of 'static' variables 'unique' to A 
Test B; //Set of 'static' variables 'unique' to B 

我願意接受任何和所有的解決問題的方法,但請避免複雜解決方案 - 這是一種改進,需要快速簡單地實施。

附加信息[按請求]: 沒有一個「問題」本身[一邊避免開銷和設計方面] - 這是爲其它幾類的幀作品/地面工作/函數來構建。所以這個類需要能夠處理多個角色/變量/類 - 爲此,它必須被模板化[雖然這不完全相關]。

它的主要作用之一是將單個字符[從文件加載]存儲在單獨的節點中。鑑於尺寸可以變化,它必須是動態的。然而,作爲其中一個角色涉及從文件加載,它不能是一個數組[因爲讀取文件以計算出參數數量,字符等會導致硬盤驅動器/訪問瓶頸]。所以...

...單鏈表可以讓每個通過角色[容易]添加一個角色[獲得角色[並且同時統計 - 解決兩個問題]。問題是單鏈表很難[安全地]刪除,導航是一種方式。這是一個問題,因爲這妨礙了搜索功能,特別是,預期的多用途角色......

......所以結論是它必須是一個雙向鏈表。我不喜歡STL或標準列表,因爲我不知道它們的效率或安全性,或者確實與班級必須支持的其他功能的兼容性。所以它必須是一個定製的D-L-List ...

...但是我之前(前一段時間)實現了Head/Node方法 - 它工作。然而,它作爲頭和節點共享功能調試變得複雜和困難。這一次我只想要一個簡單的,單一的[可讀!它將被共享!]類,它以某種方式迴避了C++幾乎'優美'的本質。這意味着沒有Head/Iter/End複製開銷(以及所需的所有功能/變量/調試)並且沒有Head系統的複製...

...靜態是我得到的最接近的。也許有某種方法可以讓你有一個存儲這三個變量的類A和一個存儲這個列表的類B,並且它們都知道對方並且能夠通過某種方法/函數進行通信(沒有指針存儲!)......

...類似的規定。我非常確定有一些層次結構,次級或無用的伎倆可能導致這種情況發生,我需要一個比我更瞭解精細藝術的人,改進我的想法等等。

+0

這不聽起來像是一個雙鏈表 - 應該有指向prev和next元素的指針,看起來像你的缺少'prev'部分。 – hummingBird 2010-11-06 09:50:34

+2

你能描述一下這個原因嗎?也許列表並不是最好的解決方案。 – peterchen 2010-11-06 10:09:34

+0

說明你真正的問題是什麼,而不是你想要的解決方案,但是你需要克服什麼問題。爲什麼你需要普遍可用的東西,但對於不同的變量? (你的意思是說,每個變量 - 不是它的成員 - 是普遍可訪問的嗎?)你如何認爲這會改善內存開銷?你如何看待這將改善處理時間? – 2010-11-06 11:12:52

回答

3

如果靜態變量是不適合的,你只有一種可能 - 使用實例變量。

如果你想分享的項目之間的變量,把它們放在列表本身並在每個項目維護的指針列表如下:

class List 
{ 
    Item* head; 
    Item* end; 
    Item* iter; 
}; 

class Item 
{ 
    List* list; 
}; 
+0

雖然這是一個不錯的主意 - 它不是一個單一實例的問題是,無論是頭部和年底將出過期在某些節點項目 - 和迭代器是在上下文中無用的。儘管我可能誤解了解決方案。 – SightS 2010-11-06 09:59:26

+0

它不會。每個列表中都有一個「頭像」等,因爲你需要它。這些項目只有一個指向「他們」列表的指針,因此可以訪問你需要的指針。 ---你也可以在一個單獨的結構中隔離三個指針,這樣你只能將這個細節暴露給節點,而不是整個列表。 – peterchen 2010-11-06 10:08:24

0

做一個清單類(如已經所示vitaut,但添加在其中的列表類的引用可以傳遞一個makeEntry()函數。如果列表變得更加複雜,我想分離這些成員列表信息,所以節點只能訪問他們