0
点赞
收藏
分享

微信扫一扫

c++primer 第十七章笔记 01tuple类型

tuple类型

	//tuple看作一个[快速而随意]的数据结构
	//三个成员都设置为0
	//tuple<size_t, size_t, size_t>threeD;
	//必须使用直接初始化,tuple的构造函数是explicit8789890-=
	tuple < string, vector<double>, int, list<int> >someVal("constants", { 3.14,2.719 }, 42, { 0,1,2,3,4 });
   //为什么可以
	tuple<size_t, size_t, size_t>threeD = { 1,2,3 };
	tuple<size_t, size_t, size_t>threed{ 1,2,3 };

	//类似make_pair ,用make_tuple来生成对象
	//item是一个tuple。包含 const char* ,int,double
	auto item = make_tuple("0-99901423-X",3,20.00);

访问tuple的成员

	//类似make_pair ,用make_tuple来生成对象
	//item是一个tuple。包含 const char* ,int,double
	auto item = make_tuple("0-99901423-X",3,20.00);

	//返回第一个成员
	auto book = get<0>(item);
	cout <<book<< endl;
	//返回第二个成员
	auto cnt = get<1>(item);
	cout << cnt << endl;
	//返回最后一个成员
	auto price = get<2>(item)/cnt;
	cout << price << endl;

	//打折百分之20  get返回指定成员的引用,就是左值引用
     get<2>(item) *= 0.8;
	cout << get<2>(item) << endl;


	//trans是item的类型  decltype确定trangs的类型 
	typedef decltype(item)trans; 
	//返回trans类型对象中成员的数量
	size_t sz = tuple_size<trans>::value;
	cout << sz << endl;
	//cnt的类型与item中第二个成员相同  cnt是一个int
	tuple_element<1, trans>::type CNT = get<1>(item);
	cout <<CNT << endl;

关系和相等运算符
类型不同或成员数量不同都不能使用关系和相等运算符

	tuple<string, string>duo("1", "2");
	tuple<size_t, size_t>twoD(1, 2);
	//bool b = (duo == twoD);//报错 ,不能比较 size_t 和string

	tuple<size_t, size_t, size_t>thREED(1, 2, 3);
	//bool b = (twoD < thREED); //报错 成员数量不同

	tuple<size_t, size_t>origin(0, 0);
	 bool b = (origin < twoD); //正确 ,b为true
	 cout << b << endl;

练习17.1.1节练习
练习17.1 17.2

	 tuple<int, int, int>a{ 10,20,30 };
	 cout << get<0>(a) << endl;
	 cout << get<1>(a) << endl;
	 cout << get<2>(a) << endl;

	 tuple<string, vector<string>, pair<string, int>>B{ "1",{"2"},{"3",4} };
	 cout << get<0>(B) << endl;
	 auto v= get<1>(B);
	 vector<string>::iterator X= v.begin();
	 cout << *X << endl;


	 auto PAIR = get<2>(B);
	 cout << PAIR.first << endl;
	 cout << PAIR.second << endl;
举报

相关推荐

0 条评论