C++11 tuple元组基本用法

前言

元组tuple是C++11的一个新特性,它是一个固定大小的不同类型值的集合,是泛化的std::pair。也可以当作一个通用的结构体来用,不需要创建结构体又获取结构体的特征,在某些情况下可以取代结构体,使程序更简洁、直观。
tuple可以说是一个既简单又复杂的类型,简单的一面是很容易使用,复杂的是它内部隐藏了很多细节,往往要和模板元的一些技巧结合起来使用。

正文

先来看基本用法,构造一个tuple

std::tuple<std::string,int> tp = std::make_tuple("hello",10);  //构造一个tuple

这个tuple等价于一个结构体:

struct A{
    std::string s;
    int len;
};

std::tuple tp就可以不用创建这个结构体了,而作用是一样的,更加简洁直观。
还有一种方法可以创建tuple,使用std::tie,它会创建一个元组的左值引用。

int a = 1;
int b = 2;
std::string str = "xyz";
auto tp = std::tie(a,b,str);
//tp的实际类型是:std::tuple

获取元组的值

获取元组中某个元素的值:

auto aa = std::get<0>(tp);
auto ss = std::get<2>(tp);

还可以通过tie解包的方式来获取元组的值:

int x,y;
std::string z;
std::tie(x,y,z) = tp;

通过tie解包后,tp中的三个值会自动赋值给三个变量,解包时,如果只想解包某个位置的值,可以用std::ignore占位符表示不解某个位置的值,比如只想解第二个位置的值:

std::tie(std::ignore,y,std::ignore);

连接两个元组

通过tuple_cat可以连接多个tuple,如下:

auto t2 = std::tuple_cat(tp,std::make_pair("aaa",5),std::make_tuple("hello",10,6));
// t2值为:  (1,2,"xyz","aaa",5,"hello",10,6)

获取tuple元素个数

可以通过std::tuple_size来获取tuple元素个数,如下:

auto t2 = std::tuple_cat(tp,std::make_pair("aaa",5),std::make_tuple("hello",10));
//  t2:  (1,2,"xyz","aaa",5,"hello",10)
 std::cout <<"count="<< std::tuple_size<decltype(t2)>::value << std::endl;

输出为7

获取元素类型

通过tuple_element获取元素类型,如下:

std::tuple<std::string, int> tp("abc", 20);
 
// 第二个元素类型
std::tuple_element<1, decltype(tp)>::type num;  // num就为int类型
 
num= std::get<1>(tp);
 
std::cout << "num: " << num<< '\n';

//输出结果:
num: 20

可以看出tuple的基本用法还是比较简单的,可以用来代替简单的结构体使用,但是不要滥用,替换超过三个以上字段的结构体就不太合适,易读性会降低,所以建议对于多个字段的结构体时,不要使用tuple.

你可能感兴趣的:(C++,c++,算法,开发语言)