blueyi's notes

Follow Excellence,Success will chase you!

0%

C/C++拾遗之tuple类型

1.C++11中提供的tuple类型,即元组,该类型类似于pair类型,可以存放不同类型的变量,不同之处是它没有数量限制。该类型定义在头文件tuple中。

2.tuple类型支持常见的操作,如==!=get<i>(t);//获取t中第i个值等。

3.tuple中不但可以存储右值,而且可以存储左值。可以利用tuple让函数一次返回多个值。

4.一个tuple使用的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <tuple>
#include <string>
#include <vector>
#include <list>

int main(void)
{
//定义并初始化一个tuple
std::tuple<int, std::string, std::vector<double>, std::list<int>>
tuVal(5, "blueyi", {0.1, 0.2, 0.3, 0.4}, {1, 2, 3, 4});
typedef decltype(tuVal) tuType; //定义一个tuVal的类型的别名
int cnt = std::tuple_size<tuType>::value; //获取tuVal中成员个数
std::cout << cnt << std::endl;
std::tuple_element<0, tuType>::type ti = std::get<0>(tuVal); //获取tuVal中的第1个成员,其中ti类型为int
//tuple_element<i, tupleType>::type中的i必须是一个const值
std::cout << "0: " << ti << std::endl;
std::tuple_element<1, tuType>::type ts = std::get<1>(tuVal); //获取tuVal中的第2个成员,其中ti类型为int
std::cout << "1: " << ts << std::endl;

std::tuple_element<2, tuType>::type tv = std::get<2>(tuVal); //获取tuVal中的第3个成员,其中tv类型为vector
std::cout << "2: " << std::endl;
for (auto t : tv) {
std::cout << t << " ";
}
std::cout << std::endl;

std::tuple_element<3, tuType>::type tl = std::get<3>(tuVal); //获取tuVal中的第4个成员,其中tv类型为list
std::cout << "3: " << std::endl;
for (auto t : tl) {
std::cout << t << " ";
}
std::cout << std::endl;
return 0;
}

Welcome to my other publishing channels