C++11引入了一种类模板tuple,实例化的对象可以存储任意数量、任意类型的数据
当存储多个不同类型的元素时,可以用tuple
当函数需要返回多个数据时,可以将这些数据存储在tuple中,返回tuple对象
Tuple
#include <tuple>
using std::tuple
1.默认构造函数
constexpr tuple();
2.拷贝构造函数
tuple(const tuple& tp1);
3.移动构造函数
tuple(tuple&& tp1);
4.隐式类型转换构造函数
template <class...UTypes>
tuple(const tuple<UTypes...>& tp1); //左值方式
template <class...UTypes>
tuple(tuple<UTypes....>&& tp1); //右值方式
5.支持初始化列表的构造函数
explicit tuple(const Types&...elems); //左值方式
template<class...UTypes>
explicit tuple(UTypes&&...elems); //右值方式
6.将pair对象转换为tuple对象
template <class U1, class U2>
tuple(const pair<U1, U2>& pr); //左值方式
template <class U1, class U2>
tuple(pair<U1, U2>&& pr); //右值方式
#include <iostream>
#include <tuple>
using std::tuple;
int main()
{
std::tuple<int, char> first;
std::tuple<int, char> second(first);
std::tuple<int, char> third(std::make_tuple(20, 'b'));
std::tuple<long, char> fourth(third);
std::tuple<int, char> fifth(10, 'a');
std::tuple<int, char> sixth(std::make_pair(30, 'c'));
auto first = std::make_tuple(10, 'a');
const int a = 0; int b[3];
auto second = std::make_tuple(a, b);
}
#include <iostream>
#include <tuple>
int main()
{
int size;
//创建一个tuple对象存储 10 和 'x'
std::tuple<int, char> mytuple(10, 'x');
//计算 mytuple 存储元素的个数
size = std::tuple_size<decltype(mytuple)>::value;
//输出 mytuple 中存储的元素
std::cout << std::get<0>(mytuple) << " " << std::get<1>(mytuple) << std::endl;
//修改指定的元素
std::get<0>(mytuple) = 100;
std::cout << std::get<0>(mytuple) << std::endl;
//使用 make_tuple() 创建一个 tuple 对象
auto bar = std::make_tuple("test", 3.1, 14);
//拆解 bar 对象,分别赋值给 mystr、mydou、myint
const char* mystr = nulllptr;
double mydou;
int myint;
//使用 tie() 时,如果不想接收某个元素的值,实参可以用 std::ignore 代替
std::tie(mystr, mydou, myint) = bar;
std::tie(std::ignore, std::ignore, myint) = bar; //只接收第3个整型值
//将 mytuple 和 bar 中的元素整合到 1 个 tuple对象中
auto mycat = std::tuple_cat(mytuple, bar);
size = std::tuple_size<decltype(mycat)>::value;
std::cout << size << std::endl;
}