0
我试图解决与Graphs
有关的问题,所以我刚开始将图表表示为邻接列表。该代码是下面 -使用STL的图(列表向量,即邻接列表) - C++
#include <iostream>
#include <list>
#include <vector>
#include <queue>
#include <stack>
using namespace std;
class Graph
{
private:
vector<list<int> > aList;
public:
Graph(int nodenum=10):aList(nodenum)
{
cout << "Created an adjacency list with "<< nodenum<< " nodes" << endl;
}
void addEdge(int from, int to)
{
aList[from].push_back(to);
cout << "Executed" << endl;
}
int size()
{
return aList.size();
}
};
int main() {
Graph gObj(4); // Graph's size is 4 nodes.
gObj.addEdge(0,1);
gObj.addEdge(1,2);
gObj.addEdge(2,0);
gObj.addEdge(3,2);
cout << "Destroyed" << endl;
return 0;
}
这里是我注意到一个奇怪的事(我不与C++ 11的专家)相对于的“后备”的使用(/缺乏)。或者,也许这是我真的会犯错的列表的初始化。
如果我这样做 -
Graph(int nodenum=10):aList(nodenum)
{
cout << "Created an adjacency list with "<< nodenum<< " nodes" << endl;
}
我可以看到我的所有边缘被添加到图中的顶点。 但是,如果我这样做 -
Graph(int nodenum=10)
{
aList.reserve(nodenum);
cout << "Created an adjacency list with "<< nodenum<< " nodes" << endl;
}
我注意到代码只是创建图形对象和休息,不添加任何优势。在Mac Bash上执行此操作后,我收到Seg故障。这是否与“保留”的用法有关,我没有考虑到矢量由内部列表组成?
有关初始化此邻接表的正确方法是什么?