第十七章 17.1.1节练习

练习17.1

定义一个保存三个int值的tuple,并将其成员分别初始化为10、20和30。

解答:

#include <tuple>
#include <iostream>

int main(){
	std::tuple<int, int, int> tuple1(10, 20, 30);
	auto tuple2 = std::make_tuple(10, 20, 30);

	std::cout << "tuple1 is " << std::endl;
	std::cout << std::get<0>(tuple1) << std::endl;
	std::cout << std::get<1>(tuple1) << std::endl;
	std::cout << std::get<2>(tuple1) << std::endl;

	std::cout << "tuple2 is " << std::endl;
	std::cout << std::get<0>(tuple2) << std::endl;
	std::cout << std::get<1>(tuple2) << std::endl;
	std::cout << std::get<2>(tuple2) << std::endl;
}

练习17.2

定义一个tuple,保存一个string、一个vector<string>和一个pair<string, int>。

解答:

#include <tuple>
#include <iostream>
#include <string>
#include <vector>
#include <map>

int main(){
	std::tuple<std::string, std::vector<std::string>, std::pair<std::string, int>> tuple0("hello", { "world", "one" }, {"two", 2});

	std::cout << "tuple0 elements:" << std::endl;
	std::cout << std::get<0>(tuple0) << std::endl;
	std::cout << std::get<1>(tuple0).at(0) << std::endl;
	std::cout << std::get<1>(tuple0).at(1) << std::endl;
	std::cout << std::get<2>(tuple0).first << std::endl;
	std::cout << std::get<2>(tuple0).second << std::endl;
}

练习17.3

重写12.3节(第430页)中的TextQuery程序,使用tupl代替QueryResult类。你认为那种设计更好,为什么?

解答:

在QueryResult中存储了三个变量,查询单词,出现行号,输出文件。

这个类,整个都可以用

tuple<std::string, std::share_ptr<std::set<line_no>>, std::share_ptr<std::vector<std::string>>> 类进行替换。

不过,对于这个元组结构,即使将std去掉也有些难于阅读,且不支持赋值构造。

所以,个人认为,还是用易与理解的QueryResult类进行记录,比较好。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值