文档章节

【试着自己写一个STL 】Knife_STL —— pair.h

闵启阳
 闵启阳
发布于 2014/01/02 19:23
字数 372
阅读 30
收藏 0
#ifndef KNIFE_PAIR_H
#define KNIFE_PAIR_H

#include "config.h"
#include <ostream>

_STL_NAMESPACE_BEGIN

template <typename A_Type, typename B_Type>
struct pair {
	typedef A_Type first_type;
	typedef B_Type second_type;

	A_Type first;
	B_Type second;

	// 这个在GP编程中会使用的特殊方法可以好好学学
	pair() : first(A_Type()), second(B_Type()) {}
	pair(const A_Type& a, const B_Type& b) : first(a), second(b) {}
	
	// 这个是保证转型情况下的正常执行,如mk_pair(3.4, 4.5)会自动得到
	// pair<double, double>的类型,但我们如果需要的是float类型
	// 那么我们必须得用这个函数进行转型
	template <typename C_Type, typename D_Type>
	pair(const pair<C_Type, D_Type>& p) : first(p.first), second(p.second) {}
};

template <typename A_Type, typename B_Type>
inline bool operator==(const pair<A_Type, B_Type>& pair1, const pair<A_Type, B_Type>& pair2)
{
	return pair1.first == pair2.first && pair1.second == pair2.second;
}

// 这是很重要的,pair在做基本operation时,应该要求他的成员也只做相应的operation
// 在我们以后设计类时可以做借鉴
template <typename A_Type, typename B_Type>
inline bool operator<(const pair<A_Type, B_Type>& pair1, const pair<A_Type, B_Type>& pair2)
{
	return pair1.first < pair2.first || (!(pair2.first < pair1.first) && pair1.second < pair2.second);
}

template <typename A_Type, typename B_Type>
inline std::ostream& operator<<(std::ostream& os, const pair<A_Type, B_Type>& p)
{
	os << " Pair<" << p.first << ", " << p.second << "> ";
	return os;
}

template <typename A_Type, typename B_Type>
inline pair<A_Type, B_Type> mk_pair(const A_Type& a, const B_Type& b)
{
	return pair<A_Type, B_Type>(a, b);
}

_STL_NAMESPACE_END

#endif /* 对这个类我增加了输出到console中的操作符<<重载 */


© 著作权归作者所有

共有 人打赏支持
闵启阳
粉丝 2
博文 11
码字总数 5345
作品 0
南京
程序员
GCC 用 C++ 来编译(酷壳)

GCC在2012年8月15日的时候,merge了一个patch - Merge from cxx-conversion branch,这意味着,以后在GCC的编译只能用C++的编译器了,也意味着,gcc的实现代码开始转向C++了。 你可能会有两个...

j_m
2012/10/22
0
0
android开发教程(3)— jni编程之采用SWIG从Java调用C/C++

Android 从Java调用C/C++ 当无法用 Java 语言编写整个应用程序时,JNI 允许您调用C/C++本机代码。在下列典型情况下,您可能决定使用本机代码: 希望用更低级、更快的编程语言C/C++去实现对时...

刘小米
2014/09/16
0
0
C++ STL编程轻松入门 4

 2.2.2 第二版:工业时代--组件化大生产   我们应该庆幸自己所生活的年代。工业时代,科技的发展所带来的巨大便利已经影响到了我们生活中的每个细节。如果你还在以原始人类的方式生活着,...

暖冰
2015/11/21
0
0
惊艳的Open WATCOM C/C++

成立于1981年的WATCOM公司于1988年推出PC版的C语言编译器,或许是专心研究的缘故, Watcom C/C++是以在DOS下能够产生最佳化程序代码闻名于世的,许多写游戏和DOS Extender的厂商都指名要使用...

Force武装卫队
2012/04/09
0
6
FFLIB之FFLUA——C++嵌入Lua&扩展Lua利器

摘要: 在使用C++做服务器开发中,经常会使用到脚本技术,Lua是最优秀的嵌入式脚本之一。Lua的轻量、小巧、概念之简单,都使他变得越来越受欢迎。本人也使用过python做嵌入式脚本,二者各有特...

知然
2013/01/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

awk命令用法介绍

10月18日任务 9.6/9.7 awk 1.awk(上)(下) 1.awk 分段操作功能 指定分隔符,并把第一段打印出来,不会改动文件内容 将所有内容打印出来 awk 没有指定分隔符号,则会默认用空格或者空白字符...

hhpuppy
31分钟前
0
0
Spring Cloud Eureka Server高可用之:在线扩容

本文共 1591字,阅读大约需要 6分钟 ! 概述 业务微服务化以后,我们要求服务高可用,于是我们可以部署多个相同的服务实例,并引入负载均衡机制。而微服务注册中心作为微服务化系统的重要单元...

CodeSheep
43分钟前
1
0
内网esxi主机上安装CoreOS虚拟机

CoreOS是一个为专门运行容器而设计的轻量级linux发行版,旨在通过轻量的系统架构和灵活的应用程序部署能力简化数据中心的维护成本和复杂度。它没有包管理工具,运行容器化应用以提供服务;默...

hiwill
今天
1
0
20181018 上课截图

![](https://oscimg.oschina.net/oscnet/49f66c08ab8c59a21a3b98889d961672f30.jpg) ![](https://oscimg.oschina.net/oscnet/a61bc2d618b403650dbd4bf68a671fabecb.jpg)......

小丑鱼00
今天
3
0
WinDbg

参考来自:http://www.cnit.net.cn/?id=225 SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols ctrl + d to open dump_file Microsoft (R) Windows Debugger Version 6.12.0002.633......

xueyuse0012
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部