2017-10-18 166 views
0

有人請解釋這最後一行嗎?我需要最終確定是否連接了兩個頂點。提升圖形和精神

include <boost/fusion/adapted/std_pair.hpp> 
include <boost/spirit/include/qi.hpp> 
include <boost/graph/edge_list.hpp> 
include <fstream> 

typedef std::pair<int,int> Edge; 
typedef std::vector<Edge> EdgeList; 
typedef boost::edge_list<EdgeList::iterator> Graph; 

namespace qi = boost::spirit::qi; 

int main() 
{ 
    std::ifstream ifs("Graph.txt"); 
    ifs >> std::noskipws; 
    //std::cout << ifs; 
    boost::spirit::istream_iterator f(ifs), l; 

    std::vector<Edge> edges; 
    bool parse_ok = qi::phrase_parse(f, l, (qi::int_ >> qi::int_) % qi::eol, qi::blank, edges); 

可以請一些解釋這最後一行?:

bool parse_ok = qi::phrase_parse(f, l, (qi::int_ >> qi::int_) % qi::eol, qi::blank, edges); 
+0

我把它作爲你從中取得代碼的副本來關閉它。如果你想問如何找到兩條邊是否連接,那與解析無關。如果你想在不使用Boost Spirit的情況下替換解析,那麼罰款:這是另一個問題,我會很樂意回答這個問題(如果你把它與輸入和你的嘗試)。 – sehe

回答

0

看着the documentation,看起來像「圖書館提供了一些免費的功能,使分析變得輕而易舉。這些解析器函數有兩種形式。第一個表單解析在字符級別上工作,第二個phrase_parse在短語級別上工作,並且需要跳過解析器。兩個版本都可以通過引用接受屬性,以便解析成功的解析值。 phrase_parse()被定義爲

template <typename Iterator, typename Expr, typename Skipper> 
inline bool 
phrase_parse(
    Iterator& first 
    , Iterator last 
    , Expr const& expr 
    , Skipper const& skipper 
    , BOOST_SCOPED_ENUM(skip_flag) post_skip = skip_flag::postskip); 

也許這是一個很好的開始。

+0

這不是一個好的開始。從教程開始:http://www.boost.org/doc/libs/1_65_1/libs/spirit/doc/html/spirit/qi.html – sehe