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;
}
时间: 2024-10-06 16:18:34

c++11 stl 学习之 pair的相关文章

c++11 stl 学习之 shared_ptr

shared_ptr智能指针 shared_ptr 的声明初始化方式由于指针指针使用explicit参数 必须显示声明初始化shared_ptr<string> pNico = new string("nico"); // ERRORshared_ptr<string> pNico{new string("nico")}; // OK 也可以使用make_shared()shared_ptr<string> pNico = mak

stl学习记录

Effective STL 中文版学习记录 条款4 判断容器是否为空 使用empty而不是size().size()操作在实现上不是一个时间常数操作条款5 尽量使用区间成员函数代替它们的单元素兄弟.STL实现中,区间范围显示比单个循环操作更优化 条款7:当使用new得指针的容器时,记得在销毁容器前delete那些指针vc2008下 运行代码 可以看到 该程序内存不断增加// 1111111.cpp : 定义控制台应用程序的入口点.// #include "stdafx.h" #incl

20145239 《信息安全系统设计基础》第11周学习总结

20145239 <信息安全系统设计基础>第11周学习总结 教材学习内容总结 8.1 异常 从处理器运行开始到结束,程序计数器假设一个序列的值a0a1......an-1,这个控制转义序列叫做处理器的控制流. 异常,就是控制流中的突变,用来响应处理器状态中的某些变化. 状态的变化称为事件,在任何情况下,当处理器检测到有事件发生时,会通过一张叫做异常表的跳转表,进行一个间接过程调用到专门处理程序--异常处理程序.当异常处理程序完成之后,根据引起引起异常的事件类型,会发生以下三种情况之一: 处理程

2016/11/23 学习总结

今天学了JDK中的常用类 Date和Calendar以前就用过,但今天再看还是跟第一次用一样.果然这些工具就要常用才行呢-- 老师让用MarkdownPad来作笔记,支持html,很溜啊,我是不是应该再过一遍HTML啊,全忘了... 摘抄了一些笔记-- 11/23学习笔记: JDK常用类 1. System类 7. DateFormate抽象类与SimpleDateFormate类 2. Runtime类 8. Calendar抽象类与GregorianCalenlar类 3. String类

标准模板库(STL)学习探究之vector容器

标准模板库(STL)学习探究之vector容器  C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据.为了可以使用vector,必须在你的头文件中包含下面的代码:#include <vector>构造函数. Vectors 包含着一系列连续存储的元素,其行为和数组类

2015.11.06 学习Ubuntu下常用命令

2015.11.06 学习Ubuntu下常用命令 1.关闭防火墙:ufw disable 2.开启防火墙:ufw enable 3.防火墙状态:ufw status 4.查看占用的端口:#lsof -i 5.查看某一个端口:#lsof -i:8080  或者是: #netstat -apn|grep 8080————接着:#ps -aux|grep 进程号 6.结束占用端口的进程:#killall 进程名 7.自己写一遍,记得牢!

201521123045 &lt;java程序设计&gt;第11周学习总结

201521123045 <java程序设计>第11周学习总结 1. 本周学习总结 2. 书面作业 2. 书面作业 Q1.1.互斥访问与同步访问完成题集4-4(互斥访问)与4-5(同步访问) import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.Condition; class Account{ private int balance; private Lock lock = new

20145326蔡馨熠《信息安全系统设计基础》第11周学习总结

20145326蔡馨熠<信息安全系统设计基础>第11周学习总结 教材内容总结 异常控制流(ECF)发生在计算机系统的各个层次,是计算机系统中提供并发的基本机制.在硬件层,异常是由处理器中的事件触发的控制流中的突变.控制流传递给一个软件处理程序,该处理程序进行一些处理,然后返回控制给被中断的控制流. 有四种不同类型的异常:中断.故障.终止和陷阱.当一个外部旧设备,例如定时器芯片或者一个磁盘控制器,设置了处理器芯片上的中断引脚时(对于任意指令)中断会异步地发生控制返回到故障指令后面的那条指令. 一

20145317《信息安全系统设计基础》第11周学习总结1

20145317<信息安全系统设计基础>第11周学习总结1 8.2进程 一个独立的逻辑控制流:他提供一个假象,好像我们的额程序独占的使用处理器.一个私有的地址空间:他提供一个假象,好像我们独占的使用存储器系统.多个流一起执行被称为并发.一个进程和其他进程轮流进行的概念被称为多任务.一个进程执行执行他的控制流的一部分的每一段时间叫做时间片. 并发流:一个逻辑流的执行在时间上与另一个流重叠.并发:多个流并发地执行的一般现象.多任务:一个进程和其他进程轮流运行的概念.时间片:一个进程执行它的控制流的