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;