我正在尝试实现无向图,我在创建工作邻接列表时遇到了一些问题。
代码:
typedef int destination_t;
typedef int weight_t;
const weight_t weight_max=std::numeric_limits<int>::infinity();
class Neighbor
{
public:
destination_t dest;
weight_t weight;
Neighbor(dest_t arg_dest, weight_t arg_weight){
this->dest=arg_dest;
this->weight=arg_weight;
}
};
图表:
typedef std::vector<std::vector<Neighbor>> AdjList_t;
class Graph
{
public:
AdjList_t* AdjList;
int noOfVertices;
Graph(int V){
AdjList=new AdjList_t(V);
this->noOfVertices=V;
}
};
然后在主要:
Graph G(2);
G.AdjList[0].push_back(Neighbor(1,3));
不会编译。
void std::vector<_Ty>::push_back(std::vector<Neighbor> &&)' : cannot convert parameter 1 from 'Neighbor' to 'std::vector<_Ty> &&'
我感觉就像在这里
AdjList=new AdjList_t(V);
我正在创建多个AdjList_t对象,但我只想设置这个容器的大小,就像我可以做的那样:
AdjList_t List(2);
但我想在构造函数中设置大小,而不是在main函数中。 这个问题的最佳解决方案是什么?
答案 0 :(得分:2)
AdjList
是一个指针。您需要先取消引用它:
(*G.AdjList)[0].push_back(Neighbor(1,3));
但是你也在泄漏内存并且不需要指针,所以我建议改为删除它:
typedef std::vector<std::vector<Neighbor>> AdjList_t;
class Graph
{
public:
AdjList_t AdjList;
int noOfVertices;
Graph(int V) :
AdjList(V), // This is how you call the constructor of a member
noOfVertices(V)
{
}
};
int main()
{
Graph G(2);
G.AdjList[0].push_back(Neighbor(1,3));
return 0;
}