我的c ++代码不适用于Graph

时间:2017-12-28 17:03:55

标签: c++ graph

我正在用c ++编写图形代码,但是存在一些问题。它工作不正常。请帮我解决它有什么问题?它的图形代码可以从用户和图形中的每个边缘获取图形的输入具有特定的权重。 这是代码:

#include <iostream>
#include <vector>

using namespace std;

struct edge {
    char src;
    char dest;
    int weight;
};

class Graph {
public:
     vector<edge> edges;
     int size,j=0;

     //Constructor
     Graph(int c) {
     size=c;
     }

     void graphDesign(char s,char d,int w) {
         edges[j].src=s;
         edges[j].dest=d;
         edges[j].weight=w;
         j++;
     }

    void printGraph() {
         for(int i=0; i<size; i++) {
            cout<<edges[i].src<<"->"<<edges[i].dest<<"  :  
               <<edges[i].weight<<endl;
         }
    }
 };


int main() {

    int e,i,w;
    char s,d;
    cout<<"Enter number of edges of graphs: ";
    cin>>e;
    Graph graph(e);
     for(i=0; i<e; i++) {
        cout<<"Enter source: ";
        cin>>s;
        cout<<"Enter destination: ";
        cin>>d;
        cout<<"Enter weight of the edge: ";
        cin>>w;

        graph.graphDesign(s,d,w);
    }

    graph.printGraph();

    return 0;
}

1 个答案:

答案 0 :(得分:1)

这里有一个问题:

void graphDesign(char s,char d,int w) {
         edges[j].src=s;
         edges[j].dest=d;
         edges[j].weight=w;
         j++;
     }

由于edges是空向量,因此访问edges[j]是非法访问。

在使用之前,您需要适当调整edges向量的大小。

class Graph {
public:
     vector<edge> edges;

     //Constructor
     Graph(int c) : edges(c) {}

这将创建一个带有c条目的向量。

此外,在此处使用无关的,不必要的成员变量,例如sizevector类具有size()成员函数,用于告诉您容器中有多少项。

使用诸如size之类的无关变量会导致出现错误的风险,因为必须在向量更改大小时更新此变量。请使用size()为您提供的std::vector功能,而不是尝试自己管理。