C++标准学习--tuple

这篇具有很好参考价值的文章主要介绍了C++标准学习--tuple。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

以下帖子介绍的比较详细:

C++的 tuple_c++ tuple-CSDN博客

tuple 是 C++11 新标准里的类型,它是一个类似 pair 类型的模板。tuple 是一个固定大小的不同类型值的集合,是泛化的 std::pair。我们也可以把它当做一个通用的结构体来用,不需要创建结构体又获取结构体的特征,在某些情况下可以取代结构体使程序更简洁直观。std::tuple 理论上可以有无数个任意类型的成员变量,而 std::pair 只能是2个成员,因此在需要保存3个及以上的数据时就需要使用 tuple 元组,而且每个确定的 tuple 类型的成员数目是固定的。

「注意」:使用tuple的相关操作需要包含相应头文件:#include<tuple>

tuple 所支持的操作

make_tuple(v1,v2,v3,v4…vn) :返回一个给定初始值初始化的tuple,类型从初始值推断。
t1 == t2 :当两个tuple具有相同数量的成员且成员对应相等时。
t1 != t2 :与上一个相反。
get(t) :返回t的第i个数据成员。
tuple_size::value :给定了tuple中成员的数量。

通过 std::tie 解包tuple,通过tie解包后,t中三个值会自动赋值给三个变量。

通过 tuple_cat 连接多个 tuple,如:

auto t2 = tuple_cat(t1, make_pair("Foo", "bar"), t1, tie(n));

下面是一些用法测试:

#include <iostream>
#include <tuple>
using namespace std;

int main()
{
        auto t3 = make_tuple(1, 2, "3c", 'F');

        cout<< "the 1st elem: " << get<0>(t3) << ", is of type: " << typeid(get<0>(t3)).name()<< endl;
        cout<< "the 2nd elem: " << get<1>(t3) << ", is of type: " << typeid(get<1>(t3)).name()<< endl;
        cout<< "the 3rd elem: " << get<2>(t3) << ", is of type: " << typeid(get<2>(t3)).name()<< endl;
        cout<< "the 4th elem: " << get<3>(t3) << ", is of type: " << typeid(get<3>(t3)).name()<< endl;
        return 0;
}
该程序的输出结果是:

C++标准学习--tuple,学习

tuple似乎非常有用,比如在设计统一接口时,传入不定数量和不同类型的参数时候。

#include <iostream>
#include <tuple>
using namespace std;

void func(tuple<int> tp){printf("in func 1\n");}
void func(tuple<int , int > tp){printf("in func 2\n");}
void func(tuple<int , int , const char*> tp){printf("in func 3\n");}
void func(tuple<int , int , const char* , char > tp){ printf("in func 4\n");}

int main()
{
        auto t3 = make_tuple(1, 2, "3c", 'F');
        const int i = 0;
        cout<< "the 1st elem: " << get<i>(t3) << ", is of type: " << typeid(get<0>(t3)).name()<< endl;
        cout<< "the 2nd elem: " << get<1>(t3) << ", is of type: " << typeid(get<1>(t3)).name()<< endl;
        cout<< "the 3rd elem: " << get<2>(t3) << ", is of type: " << typeid(get<2>(t3)).name()<< endl;
        cout<< "the 4th elem: " << get<3>(t3) << ", is of type: " << typeid(get<3>(t3)).name()<< endl;
        auto t2 = make_tuple(1, 2, "3c");
        auto t1 = make_tuple(1, 2);
        auto t0 = make_tuple(1);

        func(t3);
        func(t2);
        func(t1);
        func(t0);

        return 0;
}

输入结果为:

C++标准学习--tuple,学习

更为集中的话还可以这样:

void func(tuple<int> tp){printf("in func 1\n");}
void func(tuple<int , int > tp){printf("in func 2\n");}
void func(tuple<int , int , const char*> tp){printf("in func 3\n");}
void func(tuple<int , int , const char* , char > tp){ printf("in func 4\n");}
#if 1
void minimum(auto tp) //Here should use C++14 std to compile because auto param here.
{
        int size = tuple_size<decltype(tp)>::value;
        cout << "input size: " << size << endl;
        func(tp);
}
#endif

int main()
{
        auto t3 = make_tuple(1, 2, "3c", 'F');
        auto t2 = make_tuple(1, 2, "3c");
        auto t1 = make_tuple(1, 2);
        auto t0 = make_tuple(1);
        minimum(t3);
        minimum(t2);
        minimum(t1);
        minimum(t0);

        return 0;
}

输出结果是:

C++标准学习--tuple,学习文章来源地址https://www.toymoban.com/news/detail-782237.html

到了这里,关于C++标准学习--tuple的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++学习笔记-第11单元 标准模板库介绍

    注:本部分内容主要来自中国大学MOOC北京邮电大学崔毅东的 《C++程序设计》课程。 注:94条 C++程序规范。   本单元重点是对标准模板库中的 顺序容器 、 关联容器 的使用,以及 如何创建迭代器以遍历容器 。在使用容器时要注意不同容器的实现方式对遍历、搜索、删除、

    2024年02月13日
    浏览(39)
  • 【C++ STL之string,tuple,array详解】

    在C++的STL(Standard Template Library)中,std::string是一个非常有用的字符串类。它提供了一系列操作字符串的功能,包括字符串的创建、修改、查找、拼接等。本文将详细介绍C++ STL中std::string的使用方法和一些常见操作。 (1) 支持比较运算符 string字符串支持常见的比较操作符(

    2024年02月12日
    浏览(50)
  • C++ 学习系列 -- 标准库常用得 algorithm function

    c++ 标准库中提供了许多操作数据结构:vector、list、deque、map、set 等函数,学习并了解这些常用函数对于我们理解 c++ 的一些设计模式有着重要的作用。 源代码位置: bits/stl_algo.h accumulate 函数又两个重载版本: 第一个函数的第三个参数是初始值,是单纯的将 数据累加到初始

    2024年02月08日
    浏览(31)
  • C++遍历std::tuple(C++14 ~ C++20)

    本文展示了遍历 std::tuple 的方式: 首先比较容易想到的是利用C++14的 std::make_index_sequence 与 std::get 结合取值,然后配合 std::initializer_list 进行包展开: 到了C++17,我们有了折叠表达式(Fold expressions),就可以直白一点了: C++20允许lambda添加模板参数,因此我们可以进一步限制

    2024年02月12日
    浏览(48)
  • C++中神奇的tuple:详解使用技巧和实例解析

    在C++中,tuple是一种数据结构,用于将多个值组合在一起,形成一个有序的元组。每个值在tuple中都有一个对应的索引,可以通过索引来访问和操作其中的值。 作用: tuple将多个值组合在一起,形成一个整体。这些值可以是不同的数据类型,例如整数、浮点数、字符串等。

    2024年02月02日
    浏览(31)
  • C++学习笔记——C++ 新标准(C++11、C++14、C++17)引入的重要特性

    目录 1、简介 2.自动类型推导和初始化 示例代码 3.智能指针 示例代码 4.Lambda 表达式 示例代码 5.右值引用和移动语义 示例代码 6.并发编程支持 示例代码 7.其他特性 八、案例:实现一个简单的并发下载器 上一篇文章:     C++标准模板库(STL)是C++的一个重要组成部分,它提

    2024年01月19日
    浏览(36)
  • C++进阶语法——STL 标准模板库(下)(Standard Template Library)【学习笔记(七)】

    1、迭代器 迭代器可以将任意的容器抽象成一个序列,可以使用迭代器遍历容器中的元素 迭代器设计的目的是为了解决容器与算法之间的耦合问题,与指针类似,可以通过迭代器访问容器中的元素 迭代器的声明方式为: 容器类型::iterator 变量名称 , 可以理解为一个普通的指

    2024年02月06日
    浏览(46)
  • Python学习笔记:List、Tuple、for循环

    1.list   2.matrix 其实就是list嵌套,可以使用双重for遍历,所包含方法与list一致 3.for循环实例:随机生成一个固定大小的list,并找到list中最大的数和对应的index 4.for循环实例:删除list中重复的元素  5.tuple tuple不可变,但是可以多个tuple拼接组合 6.dictionary {key:value}  7.dictionary

    2024年02月14日
    浏览(48)
  • Python学习笔记 - 探索元组Tuple的使用

    元组(Tuple)在Python中是一种不可变的数据结构,用于存储有序的元素。 本文详细探讨了Python元组的各个方面,包括基本操作和与其他数据结构的比较。 概述了元组的基础特性,例如不可变性、有序性和索引。通过多个实例详细解释了如何进行元组的创建和查询。 除此之外

    2024年02月07日
    浏览(51)
  • C++标准模板库练习

    1.

    2024年02月10日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包