2011-01-27 44 views
1

我有一個應用程序,我有與彼此有連接的節點。每個節點都存儲到其他節點的傳入和傳出連接列表。接收節點不時需要能夠擺脫它的一個傳入連接。發生這種情況時,我希望不僅從接收節點的傳入連接列表中刪除連接,還要從連接的發送節點列表中刪除連接。但爲了做到這一點,接收節點需要發送節點的迭代器進行連接。如果我可以將該迭代器存儲爲連接對象的成員,那將會很好。但試圖做到這一點甚至不會編譯。當我嘗試將迭代器聲明爲類成員時,編譯器告訴我這是一個未定義的類型。這是我的類聲明是這樣的:一個C++對象如何將一個迭代器作爲一個成員放置在std :: list中的位置?

class Connection 
{ 
    public: 
    Connection(); 
    ~Connection(); 

    Node* pSourceNode; 
    std::list<Connection*>::iterator SourcesIterator; 
}; 

是否有任何干淨的方式來使這個或類似的東西工作,而不必寫我自己的鏈表?也許有一些數據結構到目前爲止沒有了我?

+3

IMO,這可能是危險的,因爲迭代器可以在某些算法失效。 – Max 2011-01-27 20:19:32

+3

@Max:等等,一個不相信自己不會吹噓自己的C++程序員?你確定你使用的是正確的語言嗎? – 2011-01-27 20:28:18

+0

這不是我不相信自己。事實上,當一個朋友責罵我沒有使用現成的stl容器時,我已經寫了自己的插入式鏈表。對於試圖編寫更清潔的代碼非常感興趣...... – Ream 2011-01-27 20:38:19

回答

0

我能夠編譯你的代碼就好了。你在標題中做#include <list>嗎?

無論如何,您可能不想保留iterator;大量的操作使它們失效。您可以保留指向list的指針,並在需要時獲取新的iterator

0

您可以嘗試使用typedef /向前聲明組合,可能在VC6更好地工作:

typedef class Connection* ConnectionPtr; 
class Connection 
{ 
    public: 
    Connection(); 
    ~Connection(); 

    Node* pSourceNode; 
    std::list<ConnectionPtr>::iterator SourcesIterator; 
}; 
相關問題