【C++学习】tuple数据结构
来源:互联网 发布:淘宝首页转微信链接 编辑:程序博客网 时间:2024/06/05 10:15
Tuple简介
tuple是C++ 11新的标准库之一,其表示N元数组,它相当于有N个成员的结构体,只不过这个结构体的成员都是匿名的。tuple是类似于pair的模板,tuple像是pair的泛化版本,pair只能存放两个成员,而tuple则可以多个成员,相同的是,pair和tuple都允许其成员的类型不一样。
tuple的用途
tuple的最常见的用途就是作为函数的返回值,利用它,可以实现函数返回多个值。(虽然C++通过结构体也可以实现返回多个值得能力,但是相对tuple来说会更繁琐一些。)
tuple的使用
定义tuple
tuple<int,double,string> testtuple1;//新建tuple类型tuple<int,double,string> testtuple2(1,2.0,"test");//新建tuple类型的变量,其类型为tuple<int,double,string>auto testtuple3=make_tuple("test2",123,3.14);//通过初值来初始化tuple,其类型从初值的类型中推断。
访问tuple值
与pair采用first和second来获取元素不同,因为tuple的元素个数是不固定的,所以不能用这种方式,tuple的成员都是未命名的,要访问一个tuple成员,需要使用名为get的标准库函数模板,既然是函数模板,就需要制定它的模板实参,
需要注意的是,get< n>(type)中的n需要时常量表达式,而不能是变量。
auto str=get<0>(testtuple3);//访问第一个元素,注意从0开始,auto int_v=get<1>(testtuple3);//访问第二个元素。get<2>(testtuple3)=2.0;//更改第三个元素的值。
tuple辅助函数
获取tuple的元素个数的方法
size_t sz=tupe_size<testtuple3>::value;//返回3
tupe_size< tupletype >::value 是一个类模板。
获取tuple类型第i个元素的数据类型:
// tuple_element<i,tupletype>::type 是类模板,返回第i个元素的数据类型。cout<<tuple_element<i,tupletest3>::type<<endl;
关系运算符
两个tuple变量可以直接进行比较大小,但是也有前提的。其需要满足两个条件:
1. 两个tuple具有相同数量的成员数目。
2. 两个tuple的每对成员使用==运算符都是合法的(相等与否),如果是关系运算符,则每对成员的<是合法的。
bool b=(testtuple1==testtuple2);bool b=(testtuple2<testtuple3);
另外,由于tuple定义了< 和 ==运算符,那么我们就可以将tuple系列传给排序算法。并且在无序容器中,可以将tuple变量作为关键字类型。
利用tuple使函数返回多个值
tuple<int,double,string> get_tuple(){ tuple<int,double,string> tp; ... return tp;}auto tp=get_tuple();cout<<get<0>(tp)<<get<1>(tp)<<get<2>(tp)<<endl;
参考材料:《C++ primer 5th》
0 0
- Boost C++: 数据结构---tuple
- 【C++学习】tuple数据结构
- C++TR1学习笔记之tuple
- C++primer学习:标准库特殊设施:tuple
- Python基础数据结构之tuple
- C#Tuple的用法
- C#Tuple的用法
- [C++]tuple简介
- 数据结构c语言学习
- boost::tuple学习笔记
- boost::tuple学习笔记
- Python-List&Tuple学习
- Python学习:tuple
- c++ tuple模板学习
- python3学习之tuple
- Python数据结构之——tuple
- tuple、list、dict 数据结构的方法
- 记录一下python的数据结构 - tuple
- Python 兵器谱
- 学习ASP .NET MVC5官方教程总结(十一)Details 和 Delete 方法详解
- ibatis 中isNull, isNotNull与isEmpty, isNotEmpty区别
- log4j(转载)
- liferay的theme中VM可以使用的变量一览
- 【C++学习】tuple数据结构
- 跟你比起来,大部分人都像笨蛋
- Appium源码分析(9)-helpers模块续
- 组合(Composite)
- XCode Build Settings
- VC动态调用DLL的调试方法
- jsp 有哪些内置对象?作用分别是什么?分别有什么方法?
- GMIC带你看:一人一月如何打造一百万用户App?
- NumberProgressBar酷炫进度条