我创建了以下程序
/* 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++有点陌生,非常感谢您的帮助。
此语句
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
类型的对象node (dv, ew)
隐式转换为std::list<node>
类型的对象。
你可以写例如
adj_list[sv].push_back({ 1, node (dv, ew) } );
但在任何情况下,您的代码似乎都毫无意义。
请使用:
adj_list[sv][sv].push_back(node (dv, ew));