C++:tuple的初始化【①:tuple<T1, T2, TN> t(v1, v2, v3)】【②:tuple<T1, T2, TN> t;t=make_tuple(v1, v2, v3)】

清疚 2023-09-25 14:17 184阅读 0赞

C++11 标准新引入了一种类模板,命名为 tuple(中文可直译为元组)。

tuple 最大的特点是:实例化的对象可以存储任意数量、任意类型的数据。

tuple 的应用场景很广泛,例如当需要存储多个不同类型的元素时,可以使用 tuple;

当函数需要返回多个数据时,可以将这些数据存储在 tuple 中,函数只需返回一个 tuple 对象即可。

tuple对象的创建

tuple 本质是一个以可变模板参数定义的类模板,它定义在 头文件并位于 std 命名空间中。因此要想使用 tuple 类模板,程序中需要首先引入以下代码:

  1. #include <tuple>
  2. using std::tuple;

实例化 tuple 模板类对象常用的方法有两种,一种是借助该类的构造函数,另一种是借助 make_tuple() 函数。

1、类的构造函数

tuple 模板类提供有很多构造函数,包括:

  1. 1) 默认构造函数
  2. constexpr tuple();
  3. 2) 拷贝构造函数
  4. tuple (const tuple& tpl);
  5. 3) 移动构造函数
  6. tuple (tuple&& tpl);
  7. 4) 隐式类型转换构造函数
  8. template <class... UTypes>
  9. tuple (const tuple<UTypes...>& tpl); //左值方式
  10. template <class... UTypes>
  11. tuple (tuple<UTypes...>&& tpl); //右值方式
  12. 5) 支持初始化列表的构造函数
  13. explicit tuple (const Types&... elems); //左值方式
  14. template <class... UTypes>
  15. explicit tuple (UTypes&&... elems); //右值方式
  16. 6) pair对象转换为tuple对象
  17. template <class U1, class U2>
  18. tuple (const pair<U1,U2>& pr); //左值方式
  19. template <class U1, class U2>
  20. tuple (pair<U1,U2>&& pr); //右值方式

举个例子:

  1. #include <iostream> // std::cout
  2. #include <tuple> // std::tuple
  3. using std::tuple;
  4. int main()
  5. {
  6. std::tuple<int, char> first; // 1) first{}
  7. std::tuple<int, char> second(first); // 2) second{}
  8. std::tuple<int, char> third(std::make_tuple(20, 'b')); // 3) third{20,'b'}
  9. std::tuple<long, char> fourth(third); // 4)的左值方式, fourth{20,'b'}
  10. std::tuple<int, char> fifth(10, 'a'); // 5)的右值方式, fifth{10.'a'}
  11. std::tuple<int, char> sixth(std::make_pair(30, 'c')); // 6)的右值方式, sixth{30,''c}
  12. return 0;
  13. }

2、make_tuple()函数

上面程序中,我们已经用到了 make_tuple() 函数,它以模板的形式定义在 头文件中,功能是创建一个 tuple 右值对象(或者临时对象)。

对于 make_tuple() 函数创建了 tuple 对象,我们可以上面程序中那样作为移动构造函数的参数,也可以这样用:

  1. auto first = std::make_tuple (10,'a'); // tuple < int, char >
  2. const int a = 0; int b[3];
  3. auto second = std::make_tuple (a,b); // tuple < int, int* >

程序中分别创建了 first 和 second 两个 tuple 对象,它们的类型可以直接用 auto 表示。

C++11 tuple元组详解

发表评论

表情:
评论列表 (有 0 条评论,184人围观)

还没有评论,来说两句吧...

相关阅读