STL与泛型编程(geekband)

1.定义模板

1.1函数模板
template<模板参数列表>
返回值 函数名(形参列表)

实例化函数模板
通过形参列表来推导出模板参数的实参。

模板类型参数
A类型模板参数
template<typename T>
typename T 为模板类型参数
B非类型模板参数
template<类型 a>
类型有所限定,如果是非引用或指针是整型, 有引用或指针必须有静态生存期。

编写类型无关的代码
为了达到泛型编程的目的,适用范围广,有两个原则
!模板中的函数参数是const的引用
! 函数题中的条件判断仅使用<比较运算
模板应尽量减少对实参的要求

模板的编译
模板是在编译期间实例化,第一步先检查语法,第二步实例化

1.2 类模板
类模板的定义
template<typename T>
class 类名
{
...
};

实例化类模板
类模板必须通过显示模板参数来实例化,并且每一个实例直接互相不关联。

类模板成员函数的实例化
定义前面要加上template<typename T>

在类代码内简化模板类名的使用
如果在类内可以不使用要有模板的类名
template<typename T>
class A{
A();//也可以A<T>();
A& operator ++();
};

在类模板外使用类模板名
与上面相对应,如果A()在模板外定义
template<typename T>
A<T>& A<T>::operator++(){}
其中有了A<T>::的类作用域声明或在函数中可以上在类内一样不用在类后加上类型。

类模板和友元
一对一的友元
template <tynename> class BlobPtr;

template<typename T>
class{
friend class BlaobPtr<T>;
}
两个类型参数相同

通用和特定的模板友好关系
template<typename T>class Pal;
class C{
friend class Pal<X>;//所有的Pal都是友元,并且不用前项声明。
}

令模板自己的类型参数成为友元
template<typename Type> class Bar{
friend Type;//用那个实例化,那个将成为他的友元 ,内置类型也可以。
};

类模板的static成员
每个实例有一个静态成员,通过类名 或 对象访问。

默认模板实参
和函数的默认相似

控制实例化
extern template declaration;//声明 在有定义的cpp文件生成模板实例
template declaration;//定义在该cpp生成模板。
这种实例化模板声明会实例(定义)所有的成员,所以必须保证所以类型都可以以应用于成员函数。 (普通的类模板实例是部分实例,用那个成员实例化哪个)

1.3模板的实参推断
类型转换与模板类型参数
支持转换类型
!const转换 非const的引用或指针可以向const转换
! 数组向指针转换 (函数参数不是引用类型)
其他类型都不可以比如 double向int转换

函数模板的显示实参
类似与类的实例化 函数名<显示模板参数类型>
这种支持一般的转换

尾置返回类型与类型转换

模板的特化
template<>
class stack<string>{

};
对于某种不可以转换的类型可以将其特化为可以转换的类型
还可以添加功能(成员)
模板的特例本质是模板的实例化与函数的重载不同。

模板的偏(部分)特化
类模板可以,函数模板不能,
template<typename T>
class stack<T&>{
};

泛型编程
关联特性

Paste_Image.png

是把一种类型提示为更大内存的类型 ,让程序的运行更加的同用。

迭代器

Iterators(迭代器)是算法和容器的桥梁。将迭代器作为算法的参数、通过迭代器来访问容器而不是把容器直接作为算法的参数。迭代器事故STL中的枢纽。

容器
vector
deque
list
stack
queue
map和Multimup
set和multiset
使用查表即可

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,290评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,107评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,872评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,415评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,453评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,784评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,927评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,691评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,137评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,472评论 2 326
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,622评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,289评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,887评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,316评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,490评论 2 348

推荐阅读更多精彩内容