Stl标准库-Tuple

Posted 勿在浮沙筑高台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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源码剖析>> 

以上是关于Stl标准库-Tuple的主要内容,如果未能解决你的问题,请参考以下文章

C++标准库 STL -- STL 体系结构基础介绍

C++STL标准库学习笔记multiset

C++标准库STL部分代码学习(源码之前,了无秘密)

C++标准库STL部分代码学习(源码之前,了无秘密)

STL容器自定义内存分配器

STL容器自定义内存分配器