我可以问一下<>
中adjacency_list<>
的内容吗?我是stl的新手。我知道我可以定义一个这样的容器:vector<int> vec
,但是为什么<>
中它为空?谢谢。
#include <boost/graph/adjacency_list.hpp>
using namespace boost;
adjacency_list<> g;
// adds four vertices to the graph
adjacency_list<>::vertex_descriptor v1 = add_vertex(g);
adjacency_list<>::vertex_descriptor v2 = add_vertex(g);
adjacency_list<>::vertex_descriptor v3 = add_vertex(g);
adjacency_list<>::vertex_descriptor v4 = add_vertex(g);
答案 0 :(得分:4)
这是因为adjacency_list
is a templated type。使用C ++模板时,必须指定<>
。
该类型的完整定义是:
template <class OutEdgeListS = vecS,
class VertexListS = vecS,
class DirectedS = directedS,
class VertexProperty = no_property,
class EdgeProperty = no_property,
class GraphProperty = no_property,
class EdgeListS = listS>
class adjacency_list
{
...
}
请注意,每个模板参数都有默认值:vecS
,vecS
,directedS
,no_property
,no_property
,no_property
,{{ 1}},分别。
空listS
表示您需要模板参数的默认类。通过不指定模板参数的特定值,您将获得默认值。
需要<>
的原因,并且不能被忽略(这很好,是的)是因为C ++语言的定义方式。 You can avoid it by using a typedef
,但最终使用尖括号是使用模板类型。