当前位置: 代码迷 >> 综合 >> modern C++集合——tuple
  详细解决方案

modern C++集合——tuple

热度:71   发布时间:2023-12-05 18:11:48.0

tuple:是一个固定大小的不同类型值的集合,是泛化的pair,类似于结构体。pair只能保存两个元素,而tuple理论上可以保存任意类型不同的元素。tuple从c++11开始引入。

一:特点

1.tuple不支持迭代,只能通过元素索引或者std::tie拆包后获取元素的值;且给定索引必须在编译期就给定,不能在运行期给,否则引发编译错误,如下

tuple<int, char, double, string> t(1, 'a', 2.0, "jj");
for (int i = 0; i < 3; i++)
{cout << get<i>(t) << endl; //将引发编译错误
}cout << get<0>(t) << endl;//正确的方式

2.tuple的元素类型可以是引用类型。

二:tuple的定义与初始化

tuple<int, char> t1;
tuple<int, char, double, string> t2(1, 'a', 2.0, "jj");
string str;
tuple<string&, int> t3(str, 12);
auto t4 = make_tuple(1, 'a', 2.0, "jj");get<0>(t3) = "ssss";
cout << str << endl;//str输出为"ssss"

三:基本操作

1.获取tuple元素个数

int cnt = tuple_size<decltype(t2)>::value;//cnt为4

2.获取tuple元素值

//通过get获取
cout<< get<0>(t2) << endl;//输出1//tie解包
int n;
char c;
double d;
string s;
tie(n, c, d, s) = t2;
cout << n <<";" << c << ";" << d << ";" << s << endl;//输出1;a;2;jj

3.获取tuple元素类型

tuple_element<0, decltype(t2)>::type;

4.ignore占位

tie(n, ignore, ignore, s) = t2;
cout << n <<";" << s << endl;//输出1;jj

5.c++14新特性:增加元素类型获取元素值

cout << get<double>(t2) << endl;//输出2//如果多个值类型一致则不适用
auto t5 = make_tuple(1, 2, "aa");
cout << get<int>(t5) << endl;//引发编译期错误

  相关解决方案