Я пытаюсь построить некоторые алгоритмы сетевого потока, и мне нужно представить ребра в графе.C++ new в аргументе функции
это мой край структура:
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)
, а затем изменить все в теле функции ...
Мой вопрос: Есть ли способ использовать новый вызов функции со ссылками как?:
addEdge(G, new Edge(2, 4, 0, 4));
T приветствую вас за ваши ответы. (Я новичок в C++, извините, если ответ очевиден: Нет, вы должны использовать указатели в подписи & тела ...)
Почему вы хотите использовать 'new', как это? – juanchopanza
, потому что в противном случае мне пришлось бы использовать «Edge e = Edge (1,3,0,4); addEdge (G, e); 'которые являются 2 строками кода или 2m строк, где m - количество строк – martinerk0
Это очень плохая причина для использования динамического выделения. Что вам нужно сделать, это изменить функцию на 'void addEdge (Graph & G, const Edge & E)', а затем сказать 'addEdge (G, Edge (1, 3, 0, 4));'. – juanchopanza