17.1
tuple<int, int, int > tu_0 = { 10,20,30 };
17.2
tuple<int, vector<int>, pair<string,int>> tu_2 = {10,{10},{"string",10}}; //使用列表初始化 vector,pair
17.3
class QueryResultTuple {
friend ostream& print(ostream&, const QueryResultTuple&);
public:
QueryResultTuple(string s, shared_ptr<set<line_no>> ss, shared_ptr<StrVec> sp) :spss(s,ss, sp){};
QueryResultTuple(const QueryResult& qr) :spss(spss){}
set<line_no>::iterator begin() { return get<1>(spss)->begin(); }
set<line_no>::iterator end() { return get<1>(spss)->end(); }
shared_ptr<StrVec>& get_file() { return get<2>(spss); }
private:
tuple<string, shared_ptr<set<line_no>>, shared_ptr<StrVec>> spss;
};
个人比较喜欢tuple版本,所有的信息压缩在一行内,在一段内描述了更多的信息,也使得在有限的代码阅读时间内可以获取更多的信息,但与此同时,代码的复杂度也相对的提升,由于每个人对c++标准库,语法等方便知识量了解程度的不同,可能无法对该种代码进行快速的阅读理解,一定程度上增加了维护的难度
17.4