为什么<>在adjacency_list<>中为空

时间:2015-07-12 19:24:52

标签: c++ boost boost-graph

我可以问一下<>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);

1 个答案:

答案 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
{
    ...
}

请注意,每个模板参数都有默认值:vecSvecSdirectedSno_propertyno_propertyno_property,{{ 1}},分别。

listS表示您需要模板参数的默认类。通过不指定模板参数的特定值,您将获得默认值。

需要<>的原因,并且不能被忽略(这很好,是的)是因为C ++语言的定义方式。 You can avoid it by using a typedef,但最终使用尖括号是使用模板类型。