一旦程序到达这行代码(代码在函数set_array的Graph.cpp中),它就会出错
adjList[adjList.size()].push_back(Edge(vertex, 0));
基本上,每当我需要使向量更长以适应更多链表时,我都希望调用这行,因为结构是链表的向量。这里是.h文件,它声明了链表的矢量及其内容。每个节点都将包含一个顶点和一个权重。(节点类称为class Edge
。)
#ifndef GRAPH_H_INCLUDED
#define GRAPH_H_INCLUDED
//class MinPriority;
#include <iostream>
#include <string>
#include <vector>
#include <list>
using namespace std;
class Graph
{
public:
Graph();
~Graph();
void set_Edge(string targetVertex, string vertex, int weight);
void set_array(string vertex);
void print_Test();
friend class MinPriority;
private:
class Edge
{
public:
Edge(string vertex, int weight)
{m_vertex = vertex; m_weight = weight;}
~Edge(){}
string m_vertex;
int m_weight;
};
vector< list<Edge> > adjList; //declaration of the array of linked lists
};
#endif // GRAPH_H_INCLUDED
以下是我希望adjList[adjList.size()].push_back(Edge(vertex, 0));
执行的操作;基本上每次我想在图中插入一个新顶点时,我都会调用这个。当我试图将第一个项目放入树中时,它就会出现错误。我将调用插入权重为"0"的"A",它将立即出错。顺便说一句,我正在尝试制作一个邻接列表,其中我使用adjList[adjList.size()].push_back(Edge(vertex, 0));
将一个新的(未使用的)顶点添加到图中。让我们假设它被传递到函数中。。。
A B C D
完成此操作后,向量的长度应增加4。但当然,它会在这一行设置seg错误(它在GDB中告诉我)。我对使用这样的wierd数据结构非常陌生,所以任何帮助都将不胜感激。
尝试
adjList[adjList.size()-1]
数组的索引为0..(size-1).
例如,4元素数组的索引为0、1、2和3。
如果数组可能是空的,可以添加逻辑来阻止任何访问——
if (adjList[adjList.size() > 0) ...
尝试投射数组索引:
adjList[int(adjList.size())]
或者尝试使用0?
编辑:在推送Edge元素之前,似乎必须手动输入列表。
// Creation of independant lists
list<Edge> Eg, Ec;
Edge h("AB", 0);
Edge f("CD", 0);
adjList.push_back(Eg);
adjList[adjList.size()-1].push_back(h);
adjList.push_back(Ec);
adjList[adjList.size()-1].push_back(f);
// Return 2
cout << adjList.size();
我还没有找到别的办法。但我不是c++专家。