我创建了以下程序
/* Directed Graph-- WEIGHTED */
#include<iostream>
#include<vector>
#include<list>
using namespace std;
class node{
int vertex;
int weight;
public:
node(){
vertex=0;
weight=0;
}
node(int a, int b){
vertex=a;
weight=b;
}
};
int main()
{
int no_of_vertex, no_of_relation;
cout<<endl<<"Enter no of Vertices:";
cin>>no_of_vertex;
cout<<endl<<"Enter no of relations:";
cin>>no_of_relation;
vector < list<node> > adj_list[no_of_vertex+1];
int sv=0, ew=0, dv=0;
for(int i=0; i<no_of_relation; i++)
{
cout<<endl<<"Enter Source_Vertex, Edge_Weight, Destination_Vertex:";
cin>>sv;
cin>>ew;
cin>>dv;
adj_list[sv].push_back(node (dv, ew));
}
return 0;
}
我收到错误
no matching function for call to 'std::vector<std::list<node> >::push_back(node)'
在
adj_list[sv].push_back(node (dv, ew));
我无法理解错误的原因。只是一个提示可能会做到这一切。 我对c ++有些新意,非常感谢。
答案 0 :(得分:1)
本声明
adj_list[sv].push_back(node (dv, ew));
如果将adj_list
定义为,可能有效
vector < node > adj_list[no_of_vertex+1];
但您将其定义为
vector < list<node> > adj_list[no_of_vertex+1];
编译器无法将node (dv, ew)
类型的对象node
隐式转换为std::list<node>
类型的对象。
你可以写例如
adj_list[sv].push_back({ 1, node (dv, ew) } );
但似乎你的代码无论如何都没有意义。
答案 1 :(得分:0)
相反,请使用:
adj_list[sv][sv].push_back(node (dv, ew));