2017-10-18 89 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