程序seg一旦到达这行代码就会出错(代码在函数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));
做的事情;基本上每当我想在图表中插入一个新的顶点时,我都会这样称呼它。一旦我尝试将第一个项目放在树中,它就会出现故障。我要求插入'A',权重为'0',它会立即出现故障。顺便说一句,我正在尝试建立一个邻接列表,我使用adjList[adjList.size()].push_back(Edge(vertex, 0));
在图中添加一个新的(未使用的)顶点。让我们假装将其传递给函数...
A B C D
执行此操作后,向量的长度应增加4.但当然它会在该行处出现故障(它在GDB中告诉我)。我很擅长使用像这样的奇怪的数据结构,所以任何帮助都会非常感激。
答案 0 :(得分: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 ++专家。
答案 1 :(得分:0)
尝试
adjList[adjList.size()-1]
数组索引为0 ..(size-1)。
例如,4元素数组的索引是0,1,2和3.
如果阵列可能为空,则可以添加逻辑以防止任何访问 -
if (adjList[adjList.size() > 0) ...