Tôi muốn thay thế phép lặp BGL qua các đỉnh hoặc cạnh với tương đương C++ 11 thuần túy. Mã BGL (từ: http://www.boost.org/doc/libs/1_52_0/libs/graph/doc/quick_tour.html) là:Thay thế BGL lặp qua các đỉnh với thay thế C++ 11 "thuần túy"?
typename boost::graph_traits<Graph>::out_edge_iterator out_i, out_end;
typename boost::graph_traits<Graph>::edge_descriptor e;
for (std::tie(out_i, out_end) = out_edges(v, g);
out_i != out_end; ++out_i)
{
e = *out_i;
Vertex src = source(e, g), targ = target(e, g);
std::cout << "(" << name[get(vertex_id, src)]
<< "," << name[get(vertex_id, targ)] << ") ";
}
tôi đã cố gắng một vài gợi ý từ đây: Replace BOOST_FOREACH with "pure" C++11 alternative? nhưng không may mắn.
Tôi muốn để có thể viết một cái gì đó như:
for (auto &e : out_edges(v, g))
{ ... }
hoặc một cái gì đó như:
for (std::tie(auto out_i, auto out_end) = out_edges(v, g);
out_i != out_end; ++out_i)
{...}
Có thể?
Cảm ơn bạn, nhưng mã do bạn cung cấp thậm chí không biên dịch :(Vui lòng xem mã nguồn (kèm theo mã của bạn): http://pastebin.com/Nx7WeMhU –
@ danilo2: Chính xác là gì lỗi? – Xeo
ở đây chúng là: http://pastebin.com/LDLRYwNG (Bổ sung tôi đã thêm ';' vào dòng 20, vì thiếu lỗi cú pháp dấu chấm phẩy mà không có nó) –