在常规的编程任务中使用新的<tuple>库

摘要:Tuples 是大小固定的异构对象集合,它正在被添加到 C++ 标准。学习这种强大的 数据类型有助于简化一些常规的编程任务。

C++ 标准委员会目前正在进行标准库的更 新和增强。Tuple 类型是最近添加到 C++ 标准中的内容之一。Tuple 是一个大小固定的异构 对象集合。Tuple 类型非常强大,它有助于简化一些常见的编程任务。

本文代码所依赖的常规编译器均支持 C++ 98 规范,但是目前<tulpe>库还并不一 定是 IDE 标准库的一部分。因此,要想使用这个库必须到 Boost 下载并安装。但今后的大 多数开发环境肯定都会支持<tuple>库的。

如何模拟从一个函数中返回多个类型?如何同时进行多个值的赋值和比较?

使用 <tuple> 库定义 tuple 对象并处理之。

1、构造和初始化

tuple 类型 tuple 类模板的特化或实例。目前的标准库支持 0-10个元素的 tuple。每个元素可以有不同 的类型。在下面的例子中,t 被定义为 tuple 类型,它包含两个元素,类型分别为 int 和 double:

#include <tuple>
tuple <int, double> t(1, 3.14);

为简单起见,我不使用名字空间的限定。tuple 所在的实际名字空间及其 辅助函数是根据所使用的库声明的。Boost 库在 boost::tuples 中声明 tuple。 标准 C++ 通常会在 std 中声明。

如果你省略初始化例程,那么将应用默认的初始化替代:

tuple <std::string, int*> u; //initialized to: string (),0

2、辅助函数

为了得到 tuple 的元素个数,使用 tuple_size():

int sz=tuple_size <tuple <int, const double, std::string> >::value;//3

make_tuple() 用于构造 tuple 类型。该函数按照其参数创建一 个 tuple 类型:

void f(int i);
T1=make_tuple(&f); // returns: tuple<void (*)(int)>
T2=make_tuple("hi", 2); // tuple< const char (&)[3], int>

tuple_element() 函数返回单个元素的类型。 该函数以索引和 tuple 类型为参数:

//获得第一个元素的类型
T=tuple_element <0, tuple<int, int, char> >::type;//int

如 果你需要存取实际的元素,而非类型,那么就用 get<N>() 函数。注意 tuple 使用基 于 0 的索引。

tuple <int, double> t;
int n=get<0>(t); //获得第一个元素
get<1>(t)=0.5; //给第二个元素赋值

时间: 2025-01-21 14:27:44

在常规的编程任务中使用新的&lt;tuple&gt;库的相关文章

小结:PHP编程过程中应当注意的各种注意事项

最近一段时间,PHP凭借其功能强大,简单易用的特点被越来越多的人们所喜爱和接受,成为目前最为流行的脚本编程语言之一.本文将结合用户在使用PHP过程中经常容易出现的问题,包括语法错误,程序运行错误以及逻辑错误等展开详细的介绍,希望能够对那些目前正在学习PHP语言的用户有所帮助.此外,本文还将会在文章的结束部分对PHP编程过程中应当注意的各种事项加以汇总,供读者参考. PHP脚本语言所具有一个显著的特点就是能够自动生成变量实例,不要求用户对所需要使用的变量进行声明.该特点既有值得推崇之处,但是同时也

iOS 各版本中的新特性(What&amp;#39;s New in iOS)- 目录翻译完成

iOS 各版本中的新特性(What's New in iOS) 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 介绍 Introduction文档组织结构 Organization of Thi

.net实现oracle数据库中获取新插入数据的id的方法_实用技巧

在sql sever中实现插入数据的自动增长是很容易的,但是在oracle数据库中实现这一操作不是很容易,同时要想在.net中实现获取新插入数据的id,而且不会出现读错的情况,就更显得困难了,为了解决在oracle数据中插入的数据能够自增id,同时获取新数据的id,并避免因并发操作而出现的id读错的问题. 数据表结构为test(id,name) 首先,解决数据id自增问题 创建一个序列sequence(sequence详解可从网上搜一下,这里不赘述) create sequence SEQ_te

XML 在云数据集成中的新角色--使用 XML 集成 Salesforce 数据与企业应用程序

云计算:重新定义 IT 在过去一年中,云计算爆炸式地增长,包括了形形色色的应用程序 - 比如 Salesforce CRM 和 Google Apps - 及 服务 - 比如托管于 Amazon Elastic Compute Cloud (Amazon EC2) 上的 IBM® DB2®.Google App Engine 和 Salesforce 的 Force.com 平台.这些服务通常被称为 Platform-as-a-Service (PaaS),因为它们提供了一个完整的平台,在这个平

PHP V5.3 中的新特性,第 5 部分: 从 PHP V5.2 升级到 PHP V5.3

简介 本系列着重介绍 PHP V5.3 中的新特性,例如名称空间.闭包.对象管理.面向对象编程和 Phar.虽然这些动人的新特性作为该语言的增补广受欢迎,但 PHP V5.3 同时也是为进一步优化 PHP 而设计的.它构建在流行.稳定的 PHP V5.2 的基础上,并对该语言作了增强,使之更加强大.在本文中,了解 PHP V5.3 中的变化,以及从 PHP V5.2 升级到 PHP V5.3 时需要考虑的一些事情.   回页首 语法变化 该语言新增了名称空间和闭包(在 第 2 部分 和 第 3

PHP V5.3 中的新特性,第 1 部分: 对象接口的变化

PHP V5 和面向对象编程 与 PHP V4 提供的特性相比,2004 年发布的 PHP V5 在面向对象编程(OOP)和设计方面向前迈出了很大的一步.它提供了一些必要的改进,例如类可见性.合适的构造函数和解构函数.输入提示和类反射(class-reflection)API.它为在 PHP 中进行高级的面向对象编程敞开了大门,并允许实现更加简单的设计模式,以及更好的设计类和 API. PHP V5.3 在 OOP 方面提供了大量渐进式补充.这些改进一直集中在语法补充和性能改进方面.首先,我们将

deluge-shell能处理在执行过程中产生新的console,并在console中执行命令的情况吗?

问题描述 shell能处理在执行过程中产生新的console,并在console中执行命令的情况吗? 在shell执行 deluge-console 命令时会单独打开一个console cli窗口,可在其中执行一系列自定义命令.这个过程我希望全部用shell来实现,请问shell能 处理这种执行过程中出现新的命令执行console的情况吗 解决方案 可以,启动一个cmd.exe

从spinner中开始新的activity

问题描述 从spinner中开始新的activity 需要实现的功能是spinner中一个选项可以开始一个新的activity.但是应用每次执行到这都会崩溃.我用了intent和onItemSelected .不知道哪里出现的问题,请高手指教,谢谢. import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.v

Java 编程技术中汉字问题的分析及解决(转)

编程|汉字|解决|问题 Java 编程技术中汉字问题的分析及解决 段明辉自由撰稿人2000 年 11月 8日内容: 汉字编码的常识 Java 中文问题的初步认识 Java 中文问题的表层分析及处理 Java 中文问题的根源分析及解决 Java Servlet 中文问题的根源 修改 Servlet.jar 中文乱码的处理函数 参考资料 作者简介在基于 Java 语言的编程中,我们经常碰到汉字的处理及显示的问题.一大堆看不懂的乱码肯定不是我们愿意看到的显示效果,怎样才能够让那些汉字正确显示呢?Jav