显示并添加邻接表图方法(Display and add methods for adjacency

2019-10-28 14:00发布

这是我创建使用C ++邻接表图第三次。 使用OOP是很重要的。 我觉得这个问题的答案的问题是很简单,但我不能设法解决和改善我的代码。

有它:

#include <iostream>
#include <algorithm>
#include <fstream> 
#include <vector>


using namespace std;
struct Edge
{
    int begin;
    int end;
};

class Graph
{
private:
    int numOfNodes;
    vector<vector<int>> baseVec;

public:
    Graph(int numOfNodes)
    {   

        //baseVec->resize(numOfNodes, vector<int>(numOfNodes));
        for (int i = 0; i < numOfNodes; i++)
        {
            vector<Edge> subVec;
            baseVec.emplace_back(subVec);
        }
    }

    void newEdge(Edge edge)
    {
        if (edge.begin >= numOfNodes && edge.end >= numOfNodes)
        {
            cout << "Invalid edge!\n";
        }
        baseVec[edge.begin].emplace_back(edge.end);
        baseVec[edge.end].emplace_back(edge.begin);
    }
    void display()
    {
        cout << baseVec.size();
        for (int i = 0; i < baseVec.size(); i++)
        {
            cout << "\n Adjacency list of vertex " << i << "\n head ";
            for (int j = 0; j < baseVec[i].size(); j++)
            {
                cout << baseVec[i][j];
                cout << endl;
            }
        }
    }

};

int main()
{
    int vertex, numberOfEdges, begin, end;
    cout << "Enter number of nodes: ";
    cin >> vertex;
    numberOfEdges = vertex * (vertex - 1);

    Edge edge;
    Graph g1(vertex);
    for (int i = 0; i < numberOfEdges; i++)
    {
        cout << "Enter edge ex.1 2 (-1 -1 to exit): \n";
        cin >> edge.begin >> edge.end;
        if ((begin == -1) && (end == -1))
        {
            break;
        }
        g1.newEdge(edge);
    }
    g1.display();
    return 0;
}

因此,在Visual Studio现在我有一个错误:

'的std ::矢量> ::矢量(常量的std ::矢量<_Ty,性病::分配器<_Ty >>&)':不能从 '的std ::矢量转换参数1>' 到 'const的_Alloc&'

也即在display()方法有符号/无符号不匹配。 我不知道如果有什么问题我的方法,但我坚持在这里。

Answer 1:

vector<vector<int>> baseVec;

接受vector<int>小号

vector<Edge> subVec;
baseVec.emplace_back(subVec);

尝试给它vector<Edge>秒。 这根本不符合逻辑。

vector<vector<Edge>> baseVec;

更理智。

请注意,这一变化将设立误差时的另一个爆炸

cout << baseVec[i][j];

试图打印的edge ,不知道怎么办。 要么做一个operator<<超负荷处理edge或更改你输出什么。



文章来源: Display and add methods for adjacency list graph