You need to pass an extra argument gtodegree() .
Further, since the LabeledGraph adapter does not simulate a MutableGraphcall, remove_vertexit cannot work.
, . LabeledGraph, , :
Live On Coliru
#include <iostream>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/labeled_graph.hpp>
#include <boost/graph/iteration_macros.hpp>
typedef long long node_id_t;
typedef boost::adjacency_list<boost::listS,
boost::listS,
boost::bidirectionalS,
boost::no_property,
boost::no_property
> AdjGraph;
typedef boost::labeled_graph<AdjGraph,
node_id_t
> LabeledGraph;
int main() {
LabeledGraph g;
add_vertex(10, g);
add_vertex(20, g);
add_vertex(30, g);
add_vertex(40, g);
add_vertex(50, g);
boost::graph_traits<LabeledGraph>::vertex_iterator vi, vi_end, next;
AdjGraph& underlying = g.graph();
boost::tie(vi, vi_end) = boost::vertices(underlying);
for (next = vi; vi != vi_end; vi = next) {
++next;
if (boost::degree(*vi, underlying) == 0)
boost::remove_vertex(*vi, underlying);
}
}
, LabeledGraph:
Live On Coliru
#include <iostream>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graph_utility.hpp>
typedef long long node_id_t;
typedef boost::adjacency_list<boost::listS,
boost::listS,
boost::bidirectionalS,
node_id_t,
boost::no_property
> AdjGraph;
int main() {
AdjGraph g;
add_vertex(10, g);
auto v20 = add_vertex(20, g);
add_vertex(30, g);
auto v40 = add_vertex(40, g);
add_vertex(50, g);
add_edge(v40, v20, g);
std::cout << "BEFORE:\n";
print_graph(g, boost::get(boost::vertex_bundle, g));
boost::graph_traits<AdjGraph>::vertex_iterator vi, vi_end, next;
boost::tie(vi, vi_end) = boost::vertices(g);
for (next = vi; vi != vi_end; vi = next) {
++next;
if (boost::degree(*vi, g) == 0)
boost::remove_vertex(*vi, g);
}
std::cout << "\n---\nAFTER:\n";
print_graph(g, boost::get(boost::vertex_bundle, g));
}
BEFORE:
10 -->
20 -->
30 -->
40 --> 20
50 -->
---
AFTER:
20 -->
40 --> 20