当我们需要返回多个值的时候,一般会选择使用结构体或者数组来实现。但使用结构体时,需要事先定义一个结构体,并在调用函数时传入已经定义好的结构体类型;使用数组时,就需要定义数组的长度,也不方便返回不同类型的数据。针对这些问题,C++11引入了std::tuple,可以便捷地封装多组不同类型的数据。
下面先给出std::tuple的定义和一些基本用法。头文件为
- std::tuple的定义:
template <class... Types>
class tuple;
- std::tuple的构造函数
默认构造函数、拷贝构造函数、移动构造函数、拷贝赋值运算符、移动赋值运算符和析构函数都被默认生成。我们可以使用std::make_tuple()来构建一个tuple。
下面看一下std::tuple的使用方法,首先是定义std::tuple变量:
std::tuple<int, float, std::string> myTuple = std::make_tuple(1, 3.14, "hello");
此时,myTuple就存储了一个int类型,一个float类型和一个std::string类型的变量。
我们可以使用std::get()函数来获取std::tuple中元素的值:
std::cout << std::get<0>(myTuple) << std::endl; //输出第 0 个元素,即 1
std::cout << std::get<1>(myTuple) << std::endl; //输出第 1 个元素,即 3.14
std::cout << std::get<2>(myTuple) << std::endl; //输出第 2 个元素,即 hello
此外,我们还可以使用 std::tie() 来获取 std::tuple 中的元素:
int i;
float f;
std::string s;
std::tie(i, f, s) = myTuple;
std::cout << i << std::endl; //输出 1
std::cout << f << std::endl; //输出 3.14
std::cout << s << std::endl; //输出 hello
除此之外,我们还可以使用 std::tuple_size 来获取 std::tuple 中元素的数量:
std::cout << std::tuple_size<decltype(myTuple)>::value << std::endl; //输出 3
下面是两个示例,展示了std::tuple的使用方法:
- 示例一:通过std::tuple返回多个值
#include <iostream>
#include <tuple>
std::tuple<int, float, std::string> getData() {
int i = 1;
float f = 3.14;
std::string s = "hello";
std::tuple<int, float, std::string> myTuple = std::make_tuple(i, f, s);
return myTuple;
}
int main() {
int i;
float f;
std::string s;
std::tie(i, f, s) = getData();
std::cout << i << std::endl; //输出 1
std::cout << f << std::endl; //输出 3.14
std::cout << s << std::endl; //输出 hello
return 0;
}
在这个示例中,我们定义了一个getData()函数,函数中初始化了一个std::tuple,并返回它。在main函数中通过std::tie()函数获取std::tuple中元素的值,实现了多个值的返回。
- 示例二:将std::tuple作为函数参数
#include <iostream>
#include <tuple>
void printData(std::tuple<int, float, std::string> myTuple) {
std::cout << std::get<0>(myTuple) << std::endl; //输出 1
std::cout << std::get<1>(myTuple) << std::endl; //输出 3.14
std::cout << std::get<2>(myTuple) << std::endl; //输出 hello
}
int main() {
std::tuple<int, float, std::string> myTuple = std::make_tuple(1, 3.14, "hello");
printData(myTuple);
return 0;
}
在这个示例中,我们定义了一个printData()函数,它接受一个std::tuple作为参数。在main函数中,我们定义了一个std::tuple,并将它作为参数传递给了printData()函数。函数中使用std::get()函数获取std::tuple中元素的值,并打印输出。
通过这两个示例,我们可以看到,std::tuple的使用方法很简单,它为C++程序员提供了一种便捷的封装多个不同类型数据的方式。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++11新特性std::tuple的使用方法 - Python技术站