zoukankan      html  css  js  c++  java
  • c++11 stl 学习之 pair

    pair以模板的方式存储两个数据

    namespace std {
    template <typename T1, typename T2>
    struct pair {
    // member
    T1 first;
    T2 second;
    ...
    };
    }


    p.first
    p.second

    get<0>(p) C++11
    get<1>(p) C++11

    示例 PairPrintTest()

    //=======================================
    pair接受多个参数
    示例 PairTuple()
    //========================================
    make_pair 中使用ref() 代替参数的引用&
    示例 PairRefTest
    //=============================================
    tie 的用法
    示例 TieTest
    //=====================================

    #include <tuple>
    #include <iostream>
    #include <utility>
    #include <tuple>
    #include <complex>
    #include <string>
    
    using namespace std;
    
    template<typename T1,typename T2>
    ostream& operator << (ostream& strm,
        const pair<T1, T2>&p)
    {
        return strm << "[" << p.first << "," << p.second << "]";
    }
    
    void PairPrintTest()
    {
        typedef std::pair<int, float> IntFloatPair;
        IntFloatPair p(42, 3.14f);
    
        cout << get<0>(p) << " "<< get<1>(p) << endl;
        cout << p << endl;
    }
    
    //==============================
    class Foo {
    public:
        Foo(tuple<int, float>) {
            cout << "Foo::Foo(tuple)" << endl;
        }
        template <typename... Args>
        Foo(Args... args) {
            cout << "Foo::Foo(args...)" << endl;
        }
    };
    
    void PairTupleTest()
    {
        tuple<int, float> t(1, 2.22f);
        // pass the tuple as a whole to the constructor ofFoo:
        pair<int, Foo> p1(42, t);
        // pass the elements ofthe tuple to the constructor ofFoo:
        pair<int, Foo> p2(piecewise_construct, make_tuple(42), t);
    
    }
    
    void PairRefTest()
    {
        int i = 0;
        auto p = make_pair(&i, &i);
        ++p.first;
        ++p.second;
        cout << "When use '&' i: " << i << endl;
    
        auto p1 = make_pair(ref(i), ref(i));
        ++p1.first;
        ++p1.second;
        cout << "When use 'ref()' i: " << i << endl;
    }
    
    
    void TieTest()
    {
        pair<char, char> p = make_pair('x', 'y'); //pair oftwo chars
        char c;
        tie(ignore, c) = p; //extract second value into c (ignore first one)
        cout << c << endl;
        tie(c, ignore) = p;
        cout << c << endl;
    }
    
    void TurpleTest()
    {
        int n = 998;
        auto tt = std::tuple_cat(std::make_tuple(42, 7.7, "hello"),
            std::tie(n));
    }
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        PairPrintTest();
        PairTupleTest();
        PairRefTest();
        TieTest();
        TurpleTest();
        return 0;
    }
  • 相关阅读:
    unistd.h文件
    error C3861: “getpid”: 找不到标识符
    #include <unistd.h> 的作用
    VS2013 配置pthread
    VS2008和VC6.0下使用pthread.h头文件
    文件下载之断点续传(客户端与服务端的实现)
    C++ 判断进程是否存在
    C/C++遍历进程和进程ID的小工具
    linux --> 文件系统十问
    网络通信 --> CRC校验
  • 原文地址:https://www.cnblogs.com/itdef/p/4159562.html
Copyright © 2011-2022 走看看