zoukankan      html  css  js  c++  java
  • STL标准库-Tuple

    技术在于交流、沟通,本文为博主原创文章转载请注明出处并保持作品的完整性

    在前面我介绍过一次tuple,今天在书上也看到了tuple,那就在写一次吧.

    tuple(元组),他的内部可以放任意类型的变量(有点类似结构体),前面介绍过它的递归继承,这次直接看基本使用吧

    1.创建和取出元素

    void testTuple()
    {
        tuple<string, int, int, complex<double>> t;
        
        tuple<int, float, string> t1(41, 6.3, "nico");
        
        auto t2 = make_tuple(22,44,"make_tuple");
        
        //operator=
        get<1>(t1) = get<1>(t2);
        
        //取出指定下标元素 get<index>(tuple)
        cout << "testTuple operator=: " << get<1>(t1) << endl; 
    }

    2.比较大小 : 比较原则为,先比较元素个数,然后按其元素的比较规则比较大小(比较大小的两个tuple,所含元素类型必须相同)

        void testTupleCompare()
        {
            tuple<int, float, string> t1(41, 6.3, "nico");
            auto t2 = make_tuple(22,44,"make_tuple");
            if(t1 < t2)
                cout<< "testTupleCompare t1 < t2" << endl;
            else
                cout << "testTupleCompare t1 > t2" << endl;
        }

     

    3.分割元素 tie()

        void testTupleTie()
        {
            tuple<int, float, string> t1(41, 6.3, "nico");
            int a;
            int b;
            string str;
            tie(a,b,str) = t1;
            cout << "testTupleTie a="<< a << " b=" << b << " str="<< str << endl;
        }

     

    4.tuple_size和tuple_element(取出元素类型)

        void testTupleSizeAndElement()
        {
            tuple<int, float, string> t(41, 6.2, "nico");
            cout << "testTupleSizeAndElement tuple_size = " << (tuple_size<decltype(t)>::value) << endl;//取出tuple元素个数
    
            typedef tuple_element<0,decltype(t)>::type T1;;//取出tuple元素类型
            typedef tuple_element<1,decltype(t)>::type T2;
            typedef tuple_element<2,decltype(t)>::type T3;
    
            cout << "index[0] element: " << typeid(T1).name()<<endl
                      << "index[1] element: " << typeid(T2).name()<< endl
                            << "index[2] element: " << typeid(T3).name() << endl;
        }

     

    5.拼接tuple tuple_cat

        void testTupleCat()
        {
            tuple<int> t1(41);
            auto t2 = make_tuple(22);
            auto t3 = tuple_cat(t1,t2);
            cout << __FUNCTION__ << " t3: " << get<0>(t3) << " " << get<1>(t3) << endl;
        }

     

    6.交换函数 swap()

        void testTupleSwap()
        {
            tuple<int> t1(41);
            auto t2 = make_tuple(22);
            t1.swap(t2);
            cout << __FUNCTION__ << " t1 " << get<0>(t1) << endl;
            cout << __FUNCTION__ << " t2 " << get<0>(t2) << endl;
        }

     

    参考侯捷<<STL源码剖析>> 

  • 相关阅读:
    Ubuntu虚拟机磁盘空间不足的解决
    eclipse启动报错 JVM terminated. Exit code=1
    Ubuntu16.04 安装eclipse
    HDU 1710 Binary Tree Traversals(二叉树)
    Ubuntu16.04 搭建伪分布式Hadoop环境
    HDU 1560 DNA sequence(IDA*)
    Go的函数
    Go的包
    Go语言开发环境搭建
    go的循环
  • 原文地址:https://www.cnblogs.com/LearningTheLoad/p/7675170.html
Copyright © 2011-2022 走看看