tuple元组是一个固定大小不同类型的值的集合,是泛化的std::pair。我们也可以把它当作一个通用的结构体来使用,不需要创建结构体有获取结构体特征,在某些情况可以取代结构体,使程序更简洁、直观。

  tuple在C++11中使用简单,但是往往要和模板元的一些技巧结合使用。

tuple<const char *, int> tp = make_tuple("hello", ); //构造一个tuple

  这个tuple等同于结构体:

struct A
{
char *p;
int len;
};

  另外一种方法也可以创建元组:std::tie,它会创建一个元组的左值引用。

auto tp = return std::tie(, "aa", ); //tp的实际类型是std::tuple<int &, string &, int &>

  再看如何取值:

const char *data = tp.get<>();
int len = tp.get<>();

  还有std::tie也可以解包tuple来获取元组的值:

int x, y;
string s;
std::tie(x, s, y) = tp;

  通过tie解包之后,tp的三个元素会自动赋值给三个变量,如果只想解某个位置的值,可以使用std::ignore占位符来表示忽略某个位置的值。

std::tie(std::ignore, std::ignore, y) = tp; //只解第三个值

  如果要创建右值引用的元组,可以使用foward_as_tuple。

std::map<int, std::string> map; 

//创建一个类似std::tuple<int &&, std::string &&>的tuple
map.emplace(std::foward_as_tuple(, std::string(, 'a')));

  还可以通过tuple_cat来连接多个tuple:

std::tuple<int, std::string, float> t1(, "test", 30.21);

int n = ;
auto t2 = std::tuple_cat(t1, std::make_pair("foo", "bar"), t1, std::tie(n)); n = ;

  打印t2的值:

, test, 30.21,foo, bar, , test, 30.21, 

  tuple虽然可以替代简单的结构体,但是如果三个以上字段的结构体会导致可读性降低,到处都是std::get<N>(tuple),导致代码混乱,可维护性和可读性很低。

最新文章

  1. 访问javaweb服务器sessionid存放问题
  2. Android 常用工具类之RuntimeUtil
  3. SqlSever基础 convert 将类型为字符的一列转成Int类型后进行排序
  4. js中正则表达式 书写方法
  5. JSAPI微信支付返回错误:fail_no permission to execute
  6. HDU 5776 sum (模拟)
  7. CentOS 5上Apache配置虚拟主机范例
  8. ASP.NET设置焦点到输入框
  9. Apache 隐藏入口文件 index.php
  10. 让BLE设备的名称包含MAC地址
  11. dedecms====phpcms 区别==[工作]
  12. 入坑MATLAB必会的吐血总结
  13. 什么是 ajax?----异步 javascript 和 xml
  14. 真正的轻量级WebService框架——使用JAX-WS(JWS)发布WebService(转载)
  15. C++ 多目录多文件编译 技巧
  16. git的简单命令
  17. 纯CSS选项卡
  18. MT【24】一道五次方程的求根题
  19. linux 下的emoji在MariaDB中的字符集修改
  20. 【xsy1201】 随机游走 高斯消元

热门文章

  1. js经典试题之运算符的优先级
  2. c# 生成的没用文件
  3. iOS- 用UICollectionViewController 来进行横竖屏九宫格布局
  4. JAVA学习之泛型
  5. 使用Windows Live Writer拉取之前写的博客
  6. C# Directory.GetFiles()获取文件时如果是根目录时有隐藏文件则报错的处理
  7. 【Python】PYTHON 函数局部变量和全局变量
  8. HUAS 1476 不等数列(DP)
  9. 【bzoj1742】[Usaco2005 nov]Grazing on the Run 边跑边吃草 区间dp
  10. 《转》&#39;autocomplete=&quot;off&quot;&#39;在Chrome中不起作用解决方案