zoukankan      html  css  js  c++  java
  • tuple介绍

    c++11引入的tuple,它是一个固定大小的集合,不同于vector中每个元素类型需要一样,它可包含不同类型的数值,相当于将不同类型 的数据打包在一起。

    基本使用

    初始化tuple

    #include<tuple>
    
    string cs("test");
    int a(1023);
    std::tuple<std::string, int> t = std::make_tuple(cs, a);
    std::tuple<std::string, int> t2("test2", 100);
    

    获取tuple的内容:

    
    // 获取tuple中元素个数
    size_t num = std::tuple_size<decltype(t)>::value;
    
    // 按位置索引获取指定元素,索引值从0开始
    auto stringvalue = std::get<0>(t);	// t左右一定要加挂号
    
    auto intvalue = std::get<1>(t);
    
    // 可使用tie来批量解包tuple中的内容
    string name;
    int value;
    std::tie(name, value) = t;
    
    // 如仅需tuple中指定位置的元素,可使用std::ignore当做占位符屏蔽
    int value2;
    std::tie(std::ignore, value2) = t;
    

    应用

    tuple用于打包聚合多个数据,可创建匿名结构体,如下:

       struct person {
        char *m_name;
        char *m_addr;
        int  *m_ages;
    };
     
    std::tuple<const char *, const char *, int>
    
    

    笔者觉得结构体中的成员名称带有语义信息,使用tuple,虽说有简化,但丢失语义描述信息,得不偿失。

    两个tuple的比较,要求两个tuple元素数量相同,对应位置的类型可比较。

    tuple不支持迭代,只能通过索引位置来获取元素的值,索引位置必须是编译期确定,不支持动态期传递,否则将发生编译错误。

    	for (int i = 0; i < 2; i++)
    	{
    		// 这会触发编译错误
    		auto test2 = std::get<i>(t);
    	}
    
    

    tuple中存储引用,在初始化时,需要使用另外一个tuple来初始化。

    
    std::tuple<std::string> tp1("test");
    std::string name;
    // 定义一个tp2,元素类型为string&,由tp1来进行初始化
    autp tp2 = make_tuple(std::ref(name)) = tp1;
    printf("before change:%s 
    ", std::get<0>(tp2).c_str());
    name = "abc";	// 对name的修改,会影响tp2中的值
    printf("after change:%s 
    ", std::get<0>(tp2).c_str());
    
    

    参考资料:

    1. C++ tuple元组的基本用法(总结)

    2. c++11中的tuple(元组)

    作者:浩天之家
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
    Top
    收藏
    关注
    评论
  • 相关阅读:
    51nod1693 水群
    51nod 1158 全是1的最大子矩阵
    poj1192 最优连通子集(树形dp)
    51nod 1051 最大子矩阵和(dp)
    codeforces723 D. Lakes in Berland(并查集)
    51nod 1065 最小正子段和
    poj1122 FDNY to the Rescue!(dij+反向建图+输出路径)
    51nod 1050 循环数组最大子段和
    hdu4781 Assignment For Princess(构造)
    51nod 1043 幸运号码(数位dp)
  • 原文地址:https://www.cnblogs.com/cherishui/p/14370744.html
Copyright © 2011-2022 走看看