C++新特性元组-tuple

C++中的元组-tuple

    • 一、小序
    • 二、tuple简介
    • 三、tuple的使用示例

一、小序

python程序员一定对元组这个词非常熟悉,python中的元组很强大,刚接触python时我一直认为python中的元组是对C++数组的封装,吸收了C++的数组的精华并进行了扩展。C++11以后直接增加了元组这个数据结构,或许是C++标准制定者看到了python中元组的方便,索性也直接吸收了吧。自从C++中增加了元组之后,每当一个函数需要返回多个值时,我就会想到使用元组-tuple。

二、tuple简介

tuple是一个固定大小的、可以存储不同数据类型的集合,我们可以把它当做“匿名的”一个结构体或者一个类一样使用,它却又更加的简洁、直观、好用!

可以使用make_tuple()或者std::tie()方法来构建一个元组(tie方法创建的是左值引用),可以使用std::get()来获取元组的值,也可以使用std::tie()进行解包tuple(),通常使用std::get()获取元组的值情况更多一点,至少我经常使用的场景是这样子的。

三、tuple的使用示例

// newC++.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include 
#include 
#include 
#include 

// 元组的初始化
std::tuple<std::string, int, double> initData(int type)
{
     
	switch (type)
	{
     
	case 0:
		return std::make_tuple("ISmileLi", 18, 99.5);
		break;
	case 1:
		return std::tuple<std::string, int, double>{
     "Toby",20,100.5};
		break;
	default:
		return std::tuple<std::string, int, double>();
		break;
	}
	
}

int main()
{
     
	std::tuple<std::string, int, double> tmpTuple1 = initData(0);
	std::cout << "tmpTuple1-0: " << std::get<0>(tmpTuple1)
		<< " tmpTuple1-1: " << std::get<1>(tmpTuple1)
		<< " tmpTuple1-2: " << std::get<2>(tmpTuple1)
		<< std::endl;
	
	std::tuple<std::string, int, double> tmpTuple2 = initData(1);

	std::cout << "tmpTuple1-0: " << std::get<0>(tmpTuple1)
		<< " tmpTuple1-1: " << std::get<1>(tmpTuple1)
		<< " tmpTuple1-2: " << std::get<2>(tmpTuple1)
		<< std::endl;

	std::tuple<std::string, int, double> tmpTuple3;
	tmpTuple3.swap(tmpTuple1);// 元组的交换

	std::cout << "tmpTuple3-0: " << std::get<0>(tmpTuple3)
		<< " tmpTuple3-1: " << std::get<1>(tmpTuple3)
		<< " tmpTuple3-2: " << std::get<2>(tmpTuple3)
		<< std::endl;

	// 元组的连接
	auto tuple_auto = std::tuple_cat(tmpTuple3, tmpTuple2);
	int length = std::tuple_size<decltype(tuple_auto)>::value;
	// C++中元组的循环遍历比较麻烦,这里不再演示,仅仅打印出连接后的长度
	std::cout << "length: " << length << std::endl;

	std::string name;
	int age;
	double score;
	std::tie(name, age, score) = tmpTuple3; // 解包tuple
	std::cout << "name: " << name << " age: " << age << " score: " << score << std::endl;

	std::cout << "Hello World!\n";
	getchar();
}

运行结果:
C++新特性元组-tuple_第1张图片

原创不易,点赞鼓励一下吧!

你可能感兴趣的:(C++新特性,C++,c++,C++新特性,C++元组tuple,C++,tuple,C++,元组使用)