2011-01-27 60 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; 
}; 
相关问题