C++ Primer 学习笔记_74_面向对象编程 --再谈文本查询示例[续/习题](二)

2014-11-24 12:58:58 · 作者: · 浏览: 1
nd()); return ret_lines; } set AndQuery::eva l(const TextQuery &file) const { set left = lhs.eva l(file), right = rhs.eva l(file); set ret_lines; set_intersection(left.begin(),left.end(), right.begin(),right.end(), inserter(ret_lines,ret_lines.begin())); return ret_lines; } set NotQuery::eva l(const TextQuery &file) const { set hav_val = query.eva l(file); set ret_val; for (line_no n = 0; n != file.size(); ++n) { if (hav_val.find(n) == hav_val.end()) { ret_val.insert(n); } } return ret_val; }
//5 in main.cpp
//测试数据与前面相同
#include 
  
   
#include 
   
     #include "TextQuery.h" #include "Query.h" using namespace std; int main() { ifstream inFile("input"); TextQuery file; file.read_file(inFile); Query q = Query("fiery") & Query("bird") | Query("wind"); cout << "Executed Query for :" << q << endl; typedef set
    
      line_nums; const line_nums &locs = q.eva l(file); cout << "match occurs " << locs.size() << " times" << endl; line_nums::const_iterator it = locs.begin(); for (; it != locs.end(); ++it) { cout << "\t(line " << (*it) + 1 << ") " << file.text_line(*it) << endl; } }
    
   
  

运行示例: \