我正在尝试实现一个在链表中存储邻居的无向图。因为稍后将删除边缘,我还需要将迭代器存储到相对边缘以允许同步删除。
这就是循环的来源。基本上,我想做的事情如下:
typedef std::list<Edge> Node;
typedef std::pair<Node*,Node::iterator> Edge;
Obviously这不起作用。我可以以某种方式滥用继承来打破循环吗?这个普遍适用于所有编译器吗?
struct Edge;
typedef std::list<Edge> Node;
struct Edge:public std::pair<Node*,Node::iterator>{using pair::pair;};
此外,C ++的惯用方法是什么?
答案 0 :(得分:0)
是的,您需要转发声明某些东西进行循环引用(仍然不可能循环包含)
一种惯用的方式是为Edge
的成员提供比first
和second
更好的名称。
struct Edge
{
Node * destination;
Node::iterator dual;
};