【发布时间】:2020-10-03 19:55:34
【问题描述】:
我正在查看这段代码以在 C++ 中实现 Dijkstra 的最短路径算法: https://www.geeksforgeeks.org/dijkstras-shortest-path-algorithm-using-priority_queue-stl/?ref=lbp
此时的代码我很困惑:
Graph::Graph(int V)
{
this->V = V;
adj = new list<iPair> [V];
}
void Graph::addEdge(int u, int v, int w)
{
adj[u].push_back(make_pair(v, w));
adj[v].push_back(make_pair(u, w));
}
adj 是一个指向包含两个整数对的列表的指针。
list< pair<int, int> > *adj;
然后他们在 adj 列表中使用方括号 []。我认为无法通过索引访问列表。我试过到处找这个,找不到任何东西。该网站本身也没有响应。有人知道这段代码在做什么吗?
【问题讨论】:
-
operator new和operator new[]之间存在差异。前者创建一个对象,后者创建一个array对象。 -
所以他们实际上是在创建一个列表数组,然后通过索引访问该数组?
-
如果您显示的代码是他们使用的,那么,是的,他们正在创建一个列表数组,其中(在您的代码中)
adj是一个包含V对象的数组987654328@ 类型。 -
@KyleJones “所以他们实际上是在创建一个列表数组,然后通过索引访问该数组?” 是的。更好的选择是使用
std::vector<std::list<iPair> adj(N)。 -
@KyleJones 每个 V 节点可以与可变数量的其他节点相邻,并且存储在列表中。因此 V 列表的数组。
adj[n]可能表示“与节点n相邻的节点列表”。