【发布时间】:2019-12-01 07:44:53
【问题描述】:
我正在查看这段代码
using namespace std;
// A utility function to add an edge in an
// undirected graph.
void addEdge(vector<int> adj[], int u, int v)
{
adj[u].push_back(v);
adj[v].push_back(u);
}
// A utility function to print the adjacency list
// representation of graph
void printGraph(vector<int> adj[], int V)
{
for (int v = 0; v < V; ++v)
{
cout << "\n Adjacency list of vertex "
<< v << "\n head ";
for (auto x : adj[v])
cout << "-> " << x;
printf("\n");
}
}
// Driver code
int main()
{
int V = 5;
vector<int> adj[V];
addEdge(adj, 0, 1);
addEdge(adj, 0, 4);
addEdge(adj, 1, 2);
addEdge(adj, 1, 3);
addEdge(adj, 1, 4);
addEdge(adj, 2, 3);
addEdge(adj, 3, 4);
printGraph(adj, V);
return 0;
}
此代码应打印邻接矩阵中的节点之间的连接,它确实如此。但是,我有一些疑问/问题。
-
在添加边函数中,数组的向量是按值传递的。我觉得这是不正确的,应该通过引用传递。除非我在这里错过了一个技巧。
void addEdge(vector adj[], int u, int v)
-
所以我尝试将上述转换为参考函数,如下所示
void addEdge(vector (&adj)[], int u, int v)
但这当然会因错误而失败:
候选函数不可行:没有已知的来自 'vector 的转换 [V]' 到 'vector (&)[]' 第一个参数 void addEdge(vector (&adj)[], int u, int v)
我知道有不同的方式来表示邻接矩阵,即数组、向量的向量,但如果有人能帮我弄清楚这种语法,我将不胜感激。
谢谢
【问题讨论】:
标签: c++ arrays function vector declaration