文档章节

【试着自己写一个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
南京
程序员
私信 提问
学习C++的50条,谨以送给C++的粉丝们

1.把C++当成一门新的语言学习(和C没啥关系!真的);   2.看《Thinking In C++》,不要看《C++变成死相》(C++编程思想,翻译的非常差);   3.看《The C++ Programming Language》(这...

地瓜儿
2013/01/11
1K
7
[转] C++ 的反思

最近两年 C++又有很多人出来追捧,并且追捧者充满了各种优越感,似乎不写 C++你就一辈子是低端程序员了,面对这种现象,要不要出来适时的黑一下 C++呢?呵呵呵。 原文地址:http://www.skyw...

OSC编辑部
2015/07/27
1K
15
Linux之父炮轰C++:糟糕程序员垃圾语言

"Linux内核的创始人Linus Torvalds最近在一封邮件中说明了内核开发需要使用C语言而非C++的理由。在庞大的项目中,人们对不是自己开发的模块并不了解,能快速理解其他模块中函数的 确切含义才...

亂嘞感覺
2010/06/16
2.1K
6
C语言/C++程序员编程学习代码训练—精讲

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界
03/23
0
0
C++ STL编程轻松入门 4

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

暖冰
2015/11/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

传播正能量——《海南英才》阅读的读后感2200字

传播正能量——《海南英才》阅读的读后感2200字: 新华社记者12月8日从公安部获悉,针对自媒体“网络水军”敲诈勒索等违法犯罪活动突出问题,今年以来,公安部组织各地公安机关依法深入开展侦...

原创小博客
16分钟前
1
0
Confluence 6 对一个空间进行归档后产生的影响

空间 如果一个空间被归档: 将不会在查找结果中显示,除非你选择 在归档空间中查找(Search archived spaces)。如果没有归档空间的话,这个功能是隐藏的。 页面和内容将不会在 Confluence 的...

honeymose
18分钟前
2
0
java框架学习日志-2

上篇文章(java框架学习日志-1)虽然跟着写了例子,也理解为什么这么写,但是有个疑问,为什么叫控制反转?控制的是什么?反转又是什么? 控制其实就是控制对象的创建。 反转与正转对应,正转...

白话
今天
4
0
Integer使用双等号比较会发生什么

话不多说,根据以下程序运行,打印的结果为什么不同? Integer a = 100;Integer b = 100;System.out.println(a == b);//print : trueInteger a = 200;Integer b = 200;System.out.pr...

兜兜毛毛
昨天
10
0
CockroachDB

百度云上的CockroachDB 云数据库 帮助文档 > 产品文档 > CockroachDB 云数据库 > 产品描述 开源NewSQL – CockroachDB在百度内部的应用与实践 嘉宾演讲视频及PPT回顾:http://suo.im/5bnORh ...

miaojiangmin
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部