C++元组 - tuple

本文讨论什么是std::tuple以及其使用方法。

std::tuple

std :: tuple是可以将一至多个类型绑定在一起的类型。创建元组对象时,需要将元素的类型指定为模板参数。我们可以从函数中返回该元组对象,它可以帮助我们从一个函数返回多个值从而避免创建不必要的结构。

  • 创建元组示例

    声明一个tuple,它是是个int,char,string的集合

    tuple<int, char, string>tmp(1, '2', "3");
    
  • 获取元素

    从tuple中获取值需要用到std::get函数,以索引值作为模板参数

    int i = get<0>(tmp);
    char c = get<1>(tmp);
    string s = get<2>(tmp);
    
  • 注意事项

    1. 获取索引大于元组封装的元素数量的任何元素将导致编译时错误。
    2. 从元组获取元素时使用错误的类型也会导致错误。
    3. 应该以常量类型作为get的模板参数,否则会导致编译时间错误。
    auto a = get<3>(tmp);	//超出范围
    auto b = get<i>(tmp);	//只能用常量
    i = get<2>(tmp);		//使用错误的类型
    

进阶:std::make_tuple

注意编译器无法自动推导出tuple类型,例如:

auto tmp{1,'1',"1"};	//编译错误

C++11提供了make_tuple来解决元素个数很多时声明tuple的不便。它通过从参数类型推导出元组中元素的目标类型来创建std :: tuple对象。

auto a = make_tuple(1, '2', "3");

以上的代码中,make_tuple接受三个参数,并自动推导它们的类型为int,char和string。然后,它在内部创建了一个 tuple 对象,并将其初始化并返回。因此,基本上make_tuple有助于自动推导元组类型。

你可能感兴趣的:(C++,11新特征)