【发布时间】:2014-05-02 08:42:56
【问题描述】:
我初始化一个指针向量,每个指针指向一个邻居列表,以实现 Graph 的邻接列表表示。
class Graph
{
public:
Graph(int V) : vertices(V) {}
// Member functions for Graph class
void addEdge();
void print();
void type(string);
private:
vector<list<int> *> vertices;
};
addEdge 函数要求用户输入从哪个顶点到另一个顶点的边。我认为在填充向量时某处有错误。
void Graph::addEdge()
{
int v, w;
cout << "\nvertex: ";
cin >> v;
cout << "\nadjacent: ";
cin >> w;
vertices[v]->push_back(w);
}
如果这是填充我介绍的数据结构的正确方法,我需要帮助!如果不是,那么执行任务的正确方法是什么?
【问题讨论】:
-
为什么向量中包含指针?您是否在任何地方分配和添加这些列表?
-
我在 [您的上一个问题](stackoverflow.comAC/questions/23415287/initializing-a-vector-to-a-list-of-integers) 中提出的相同问题适用于此:你为什么需要存储指向列表的指针吗?
-
您可以使用
boost::graph,而不是重新发明轮子。 -
@molbdnilo - 因为图的邻接列表表示需要一个数组/向量持有指向包含特定顶点相邻点的数组/向量/列表的指针。
-
@mehdix_ 邻接表表示不需要指针,它需要一个动态大小的集合。
vector和list就是这样的集合,vector通常效率更高。