gpt4 book ai didi

c++ - 如何使用对象 vector 的 vector ?

转载 作者:行者123 更新时间:2023-11-28 02:50:42 25 4
gpt4 key购买 nike

我正在尝试实现无向图,但在创建工作邻接表时遇到了一些问题。

代码:

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);

但我想在构造函数中设置大小,而不是在主函数中。这个问题的最佳解决方案是什么?

最佳答案

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;
}

关于c++ - 如何使用对象 vector 的 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23134076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com