C++ new 函数参数

C++ new in function argument

我正在尝试构建一些网络流算法,我需要在图中表示边。

这是我的边缘结构:

struct Edge{
  int from, to, flow, cap;
  Edge(int fromC, int toC, int flowC , int capC)
    : from(fromC), to(toC), flow(flowC), cap(capC)
  {};
};

然后我有带邻接表的图结构:

struct Graph {
  int N;
  vector<vector<Edge> > adjList;  // list of neighbours    

  Graph(int n) {                  // constructor
    N=n;
    adjList.resize(n);
  }
};

然后我有将边添加到邻接表的功能:

void addEdge ( Graph &G, Edge &E)
{
  G.adjList[E.from-1].push_back(E);
}

我想使用这个语法:

Graph G = Graph(4);  // creates graph with4 vertices
addEdge(G, new Edge(2, 4, 0, 4)); 

但这不起作用……我必须将函数更改为:

 void addEdge(Graph &G, Edge *E)

然后修改函数体中的所有内容...

我的问题是: 有没有办法在函数调用中使用 new 和像 ?:

这样的引用
addEdge(G, new Edge(2, 4, 0, 4)); 

感谢您的回答。 (我是 C++ 的新手,抱歉,如果答案很明显:不,你必须在签名和正文中使用指针...)

摆脱 new 并让 addEdge 接受 const Edge&。这使您可以像这样简单地使用自动临时文件:

addEdge(G, Edge(2,4,0,4));

addEdge的签名变成void addEdge(Graph &G, const Edge &E).

是的,你可以只写:

addEdge(G, Edge(2,4,0,4));

但是你应该考虑性能问题。这种形式在堆栈上创建临时实例,所以你应该做一个副本(push_back 已经做了)。

声明 addEdge 获取 const 引用,因为您没有修改原始对象。

那么你可以简单地这样做:

void addEdge ( Graph &G, const Edge &E) { ... }
addEdge(G, Edge(2,4,0,4)); 

这是 C++ 中的首选方法,因为它避免了动态分配。