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;
}

 

posted on 2014-12-12 13:46  itdef  阅读(345)  评论(0编辑  收藏  举报

导航