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;

}

 

你可能感兴趣的:(C++)