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   itdef  阅读(348)  评论(0编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示