C++11 tuple 元组

tuple容器(元组), 是表示元组容器, 是不包含任何结构的,快速而低质(粗制滥造, quick and dirty)的, 可以用于函数返回多个返回值;

tuple容器, 可以使用直接初始化, 和"make_tuple()"初始化, 访问元素使用"get<>()"方法, 注意get里面的位置信息, 必须是常量表达式(const expression);

可以通过"std::tuple_size<decltype(t)>::value"获取元素数量; "std::tuple_element<0, decltype(t)>::type"获取元素类型;

如果tuple类型进行比较, 则需要保持元素数量相同, 类型可以比较, 如相同类型, 或可以相互转换类型(int&double);

无法通过普通的方法遍历tuple容器, 因为"get<>()"方法, 无法使用变量获取值;

以下代码包含一些基本的用法, 详见注释;

示例代码:

/*eclipse cdt, gcc 4.8.1*/  

#include <iostream>
#include <vector>
#include <string>
#include <tuple> using namespace std; std::tuple<std::string, int>
giveName(void)
{
std::string cw("Caroline");
int a();
std::tuple<std::string, int> t = std::make_tuple(cw, a);
return t;
} int main()
{
std::tuple<int, double, std::string> t(, 128.0, "Caroline");
std::tuple<std::string, std::string, int> t2 =
std::make_tuple("Caroline", "Wendy", ); //返回元素个数
size_t num = std::tuple_size<decltype(t)>::value;
std::cout << "num = " << num << std::endl; //获取第1个值的元素类型
std::tuple_element<, decltype(t)>::type cnt = std::get<>(t);
std::cout << "cnt = " << cnt << std::endl; //比较
std::tuple<int, int> ti(, );
std::tuple<double, double> td(28.0, 56.0);
bool b = (ti < td);
std::cout << "b = " << b << std::endl; //tuple作为返回值
auto a = giveName();
std::cout << "name: " << get<>(a)
<< " years: " << get<>(a) << std::endl; return ;
}

输出结果:

num = 3
cnt = 128
b = 1
name: Caroline years: 2013

C++ pair 点对

1 pair的应用

pair是将2个数据组合成一个数据,当需要这样的需求时就可以使用pair,如stl中的map就是将key和value放在一起来保存。另一个应用是,当一个函数需要返回2个数据的时候,可以选择pair。 pair的实现是一个结构体,主要的两个成员变量是first second 因为是使用struct不是class,所以可以直接使用pair的成员变量。

2 make_pair函数

template pair make_pair(T1 a, T2 b) { return pair(a, b); }

很明显,我们可以使用pair的构造函数也可以使用make_pair来生成我们需要的pair。 一般make_pair都使用在需要pair做参数的位置,可以直接调用make_pair生成pair对象很方便,代码也很清晰。 另一个使用的方面就是pair可以接受隐式的类型转换,这样可以获得更高的灵活度。灵活度也带来了一些问题如:

std::pair<int, float>(1, 1.1);

std::make_pair(1, 1.1);

是不同的,第一个就是float,而第2个会自己匹配成double。

类模板:template <class T1, class T2> struct pair

参数:T1是第一个值的数据类型,T2是第二个值的数据类型。

功能:pair将一对值组合成一个值,这一对值可以具有不同的数据类型(T1和T2),两个值可以分别用pair的两个公有函数first和second访问。

具体用法:

1.定义(构造):

1     pair<int, double> p1;  //使用默认构造函数
2 pair<int, double> p2(1, 2.4); //用给定值初始化
3 pair<int, double> p3(p2); //拷贝构造函数

2.访问两个元素(通过first和second):

1     pair<int, double> p1;  //使用默认构造函数
2 p1.first = 1;
3 p1.second = 2.5;
4 cout << p1.first << ' ' << p1.second << endl;

输出结果:1 2.5

3.赋值operator = :

(1)利用make_pair:

1     pair<int, double> p1;
2 p1 = make_pair(1, 1.2);

(2)变量间赋值:

    pair<int, double> p1(1, 1.2);
pair<int, double> p2 = p1;

Pair类型概述

pair是一种模板类型,其中包含两个数据值,两个数据的类型可以不同,基本的定义如下:

pair<int, string> a;

表示a中有两个类型,第一个元素是int型的,第二个元素是string类型的,如果创建pair的时候没有对其进行初始化,则调用默认构造函数对其初始化。

pair<string, string> a("James", "Joy");

也可以像上面一样在定义的时候直接对其初始化。

由于pair类型的使用比较繁琐,因为如果要定义多个形同的pair类型的时候,可以时候typedef简化声明:

typedef pair<string, string> author;

author pro("May", "Lily");

author joye("James", "Joyce");

Pair对象的操作

  • 对于pair类,由于它只有两个元素,分别名为first和second,因此直接使用普通的点操作符即可访问其成员

pair<string, string> a("Lily", "Poly");

string name;

name = pair.second;

  • 生成新的pair对象

可以使用make_pair对已存在的两个数据构造一个新的pair类型:

int a = 8;

string m = "James";

pair<int, string> newone;

newone = make_pair(a, m);

最新文章

  1. NotificationCenter接收不到通知的原因
  2. CSS总则。
  3. 【KVM安装】在Centos6.8中安装KVM
  4. windows下查看所有进程以及pid
  5. iOS 应用内付费(IAP)开发步骤
  6. 一款jquery编写图文下拉二级导航菜单特效
  7. Js Pattern - Namespace Pattern
  8. ubuntu设置ip和dns
  9. 设计模式——依赖倒置原则实例(PHP实现)
  10. 使用HeartBeat实现高可用HA的配置过程详解
  11. hdu4416 Good Article Good sentence (后缀数组)
  12. mysql 远程连接数据库的二种方法
  13. eclipseIDE for javaee developers 开发环境搭建详解图文
  14. foot
  15. git pull的理解 以及 git conflict的解决
  16. python3实现感知器,简单神经网络
  17. POJ-3252 Avenger
  18. JS 实现Json查询的方法实例
  19. Mac - iPhone屏幕录制
  20. 有关查询和执行计划的DMV

热门文章

  1. python导包语句执行
  2. MySQL优化总结-查询总条数
  3. java多线程批量读取文件(七)
  4. graphviz使用
  5. Codeforces Round #482 (Div. 2) :C - Kuro and Walking Route
  6. POJ:2976-Dropping tests(二分平均值)
  7. keil调试问题记录
  8. 6,MongoDB 之 Array Object 的特殊操作
  9. 剑指Offer - 九度1349 - 数字在排序数组中出现的次数
  10. Dapper 学习笔记