tuple元组
tuple是一个元组容器,可以用于函数返回多个值, 一个tuple元组可以有任意数量的成员
tuple的两种初始化方式:
tuple<int, int> t1(1, 2);
tuple<int, int> t2{1, 2};
make_tuple
用于生成tuple对象,和pair和make_pire
类似:
auto t3 = make_tuple(1, 2);
tuple的成员数量没有限制
访问成员使用一个get
的标准库函数模板,为了指定一个显示模板,必须指定想要访问的第几个成员。
tuple<string, string, int> item = make_tuple("Hello", "World", 12345);
auto val = get<0>(item)
尖括号中表示的是下标数,从0开始。
获得成员数量和类型
使用两个辅助类模板查询tuple元组的类型和变量。
typedef decltype(item) trans; //trans是item的类型
size_t sz = tuple_size<trans>::value; //返回trans类型对象中成员的数量
tuple_element<1, trans>::type cnt = get<1>(item); //cnt是int类型
tuple使用实例
tuple<string, int> giveName(void)
{
tuple<string, int> t("Hello", 123);
return t;
}
int main(int argc, char** argv)
{
//函数返回tuple元组容器
auto a = giveName();
cout << get<0>(a) << "-" << get<1>(a) << endl;
//得到元组得个数
tuple<int, double, string> t(64, 1.23, "Hello");
tuple<string, string, int> t1 = make_tuple("Hello", "World", 12345);
//得到t元组元素得个数
size_t num = tuple_size<decltype(t)>::value;
cout << num << endl; //3
//获得t元组第二个元素得值
tuple_element<1, decltype(t)>::type val = get<1>(t);
cout << "val = " << val << endl;
//比较
tuple<int, int> t2(24, 48);
tuple<double, double> t3(28.0, 56.0);
bool b = (t2 < t3);
cout << "b = " << b << endl;
return 0;
}