【发布时间】:2015-11-12 09:41:08
【问题描述】:
我正在尝试使用向量数组来实现图形。我在这样做时遇到了难以置信的困难。向量将保存与顶点 v 相邻的顶点,这是名为 uvertices 的数组的索引。
这是我目前所拥有的。
class Graph {
public:
int V; //this will represent the number of vertices in the graph
std::vector<int>* vertices;
Graph(int V) {
vertices = new std::vector<int>[V];
}
在这里,我创建(或认为并打算创建)一个包含向量的大小为 V(V 是图中的顶点数)的 ARRAY。然后我希望能够创建边缘,所以我有
void Graph::insert_edge(int v, int u) {
}
作为一种方法。我想将值 u 推回保存顶点 v 的邻接列表的向量中。我的向量数组的每个索引(名为 vertices)代表图中每个顶点 v 的标识符。所以我想做类似的事情
vertices[v].push_back(u);
我惊讶地发现,当我输入 vertices[v]. 时,Intellisense 给了我一个可能的函数列表,包括 push_back。我感到惊讶的原因是因为我实际上并没有创建任何向量,但我就这样离开了。这显然是行不通的,所以我开始调试,我意识到每当我第一次调用 insert_edge 时,它都会告诉我数组“顶点”的大小和容量为 0。尽管我将图形数据结构创建为
Graph G(8);
我花了大约两个小时试图弄清楚如何使用它,但我没有成功。
如何制作,以便在插入边时,我可以查看顶点数组中的正确索引 v,并访问该数组索引保存的向量的 push_back 函数,以便我可以添加顶点 u 到顶点 v 的邻接表。
另外,我真的真心恳求,如果人们给我投反对票或投票结束我的话题,请告诉我原因。花时间把所有这些都写出来并确保写得很清楚只是为了被否决而没有人告诉我他们为什么要对我投反对票,这真是令人沮丧。
【问题讨论】:
-
您确定您的意思是
new std::vector<int>[V]而不是new std::vector<int>(V)? -
@CompuChip 是的。我正在动态创建一个包含 std::vector
类型对象的数组 -
@FrostyStraw 为什么要手动管理内存?
-
正如@user2079303 所暗示的,使用向量向量比使用向量数组更容易。
-
@FrostyStraw 啊,我错过了您正在创建向量数组。令人困惑:)