5.子类模板访问基类模板
在子类模板中访问那些在基类模板中声明且依赖于模板参数的符号,应该在它前面加上作用域限定符"::" 或者显示使用this指针
否则,编译器将试图在全局域中寻找该符号,引发错误。
参见:inherit.h

6.模板型模板参数
类模板的模板参数如果结合的实参不是具体类型而是另一个模板,那么不能使用typename关键字声明该参数,而是写明其所结合的类模板实参的原型:
template<模板形参表> class 模板型模板参数名
参见ta.cpp

对于函数模板,GNU编译器允许为其传递模板型模板参数,但是从C++标准并不支持。

7.嵌套模板的外部定义
如果将嵌套于一个类模板的内部模板放到包装模板的外部定义,需要按照作用域层次的顺序,从外到内,从前到后一次使用独立template字句声明其模板参数表

8.“零”初始化
基本类型不存在缺省构造函数,所以未被显示初始化的局部变量和成员变量具有一个未定义的初值。如果希望模板函数或者模板类中所有参数花类型的变量,无论是基本类型还是类类型,都能以缺省方式被初始化,就必须显示进行缺省构造(写出构造函数),即“零”初始化。
T var = T();  //局部变量
...:m_var()...//成员变量
参见:init.cpp

9.虚函数和多态
(1)类模板中可以声明虚函数,而且只要实例化该模板时所提供的类型实参不违背虚函数有效覆盖的条件,就可以形成多态
(2)由于模板函数的延迟编译要晚于类或者类模板中虚表的构建,因此模板函数不能同时又是虚函数
参见vf.cpp

列出不能被声明为虚函数的函数:
全局函数,静态成员函数,构造函数,模板型成员函数

四 、编译模型
1.单一模型:将函数,类和模板的声明,实现和使用放在同一
声明
实现
使用

优点:一目了然,构建方便
缺点:难以维护,难以复用,不利于协作开发

2.分离模型:将函数、类和模板的声明、实现和使用分别放在不同的源代码文件中
优点:易于维护,易于复用,便于协作开发
缺点:需要编写专门的构建脚本————makefile
致命:编译模板实现代码时,编译器看不到对模板的使用,因此所生成的目标模块中没有关于该模板的二进制指令,
            最终导致链接失败
        参见:div/

3.包含模型:在模板声明文件的尾部包含模板实现文件,保证所有使用该模板的代码在头肩扩展以后都实际包含了该模板的声明和使用,保证延迟编译的顺利进行,链接成功。
优点:解决了分离模型的致命问题——链接失败
缺点:模板的实现代码必须公开,延长编译时间。
参见:inc/

4.实例模型:在模板的实现中包含对该模板的显示实例化代码,旨在迫使编译器在看到对模板使用之前,提前二次编译,
保证链接通过。
优点:模板的实现代码不必公开,编译时间不受影响
缺点:实例化类型有限,无法实现绝对通用。

5.导出模型:通过export关键字将模板声明导出,编译器会将该模板一次编译之后形成的内部表示缓存到其目标文件(.o)中
在链接阶段结合使用该模板的代码所提供的类型实参,完成二次编译
优点:代码分离、实现不公开、编译速度快,类型通用。
缺点:绝大多数编译器并不支持该模型。
GNU / MIicrosoft / IBM / Oralce / HP 都不支持
C++2011 / 2014 / 2017 已经废弃此模型。export关键字已经被挪作他用。

五、容器、迭代器和泛型算法
容器:基于类模板语法实现泛型数据结构

泛型算法:基于函数模板语法实现泛型常用算法。

迭代器:基于指针语法实现面向不同容器的同一访问方式。

双向线性链表容器:

正向顺序可写迭代器:

线性查找算法:

体现的算法======>工具  是给别人用的,好用,方便,接口,简单易用并且高效

如果一个类中含有 指针成员,并且指向的是动态分配的内存,这个时候往往需要自己给出 支持深拷贝的构造构造和拷贝赋值操作符函数

C++之STL的更多相关文章

  1. 详细解说 STL 排序(Sort)

    0 前言: STL,为什么你必须掌握 对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算 ...

  2. STL标准模板库(简介)

    标准模板库(STL,Standard Template Library)是C++标准库的重要组成部分,包含了诸多在计算机科学领域里所常见的基本数据结构和基本算法,为广大C++程序员提供了一个可扩展的应 ...

  3. STL的std::find和std::find_if

    std::find是用来查找容器元素算法,但是它只能查找容器元素为基本数据类型,如果想要查找类类型,应该使用find_if. 小例子: #include "stdafx.h" #i ...

  4. STL: unordered_map 自定义键值使用

    使用Windows下 RECT 类型做unordered_map 键值 1. Hash 函数 计算自定义类型的hash值. struct hash_RECT { size_t operator()(c ...

  5. C++ STL简述

    前言 最近要找工作,免不得要有一番笔试,今年好像突然就都流行在线笔试了,真是搞的我一塌糊涂.有的公司呢,不支持Python,Java我也不会,C有些数据结构又有些复杂,所以是时候把STL再看一遍了-不 ...

  6. codevs 1285 二叉查找树STL基本用法

    C++STL库的set就是一个二叉查找树,并且支持结构体. 在写结构体式的二叉查找树时,需要在结构体里面定义操作符 < ,因为需要比较. set经常会用到迭代器,这里说明一下迭代器:可以类似的把 ...

  7. STL bind1st bind2nd详解

    STL bind1st bind2nd详解   先不要被吓到,其实这两个配接器很简单.首先,他们都在头文件<functional>中定义.其次,bind就是绑定的意思,而1st就代表fir ...

  8. STL sort 函数实现详解

    作者:fengcc 原创作品 转载请注明出处 前几天阿里电话一面,被问到STL中sort函数的实现.以前没有仔细探究过,听人说是快速排序,于是回答说用快速排序实现的,但听电话另一端面试官的声音,感觉不 ...

  9. STL的使用

    Vector:不定长数组 Vector是C++里的不定长数组,相比传统数组vector主要更灵活,便于节省空间,邻接表的实现等.而且它在STL中时间效率也很高效:几乎与数组不相上下. #include ...

  10. [C/C++] C/C++延伸学习系列之STL及Boost库概述

    想要彻底搞懂C++是很难的,或许是不太现实的.但是不积硅步,无以至千里,所以抽时间来坚持学习一点,总结一点,多多锻炼几次,相信总有一天我们会变得"了解"C++. 1. C++标准库 ...

随机推荐

  1. GJM : Python简单爬虫入门 (一) [转载]

    版权声明:本文原创发表于 [请点击连接前往] ,未经作者同意必须保留此段声明!如有侵权请联系我删帖处理! 为大家介绍一个简单的爬虫工具BeautifulSoup BeautifulSoup拥有强大的解 ...

  2. 命令行工具解析Crash文件,dSYM文件进行符号化

    备份   文/爱掏蜂窝的熊(简书作者)原文链接:http://www.jianshu.com/p/0b6f5148dab8著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 序 在日常开发 ...

  3. Headroom.js – 快速响应用户的页面滚动操作

    Headroom.js 是一个轻量级,高性能的JS插件(无依赖性!),允许你响应用户的滚动行为.Headroom.js 使您能够在适当的时候把元素融入视图,而其它时候让内容成为焦点.Headroom. ...

  4. oracle表的管理

    表名和列的命名规则 必须以字母开头: 长度不能超过30字符: 不能使用oracle的保留字: 只能使用如下字符:A-Z,a-z,0-9,$,#等:   数据类型: 字符型: char       定长 ...

  5. 教你写能被舒服舒服又舒服地调用的iOS库

    目录 前言 脑洞开一开 分析 整容 结语 前言 2014年过的那么快,过年又那么块,2015年又是飞快地节奏,真尼玛感觉上帝是不是无聊使用了变速外挂开启了加速模式~到现在博主都无法接受已经上班的事实… ...

  6. iframe父页面获取子页面的高度

    最近做项目中用到了iframe,子页面更改父页面的高度,经过九九八十一难,找到了解决的办法. $(window).load(function() {  var h=$(document).height ...

  7. MyEclipse 2015 CI 14发布(附下载)

    支持Web和Node.jsd的JavaScript Debugger调试器,新版本功能更加强大,在MyEclipse调试web应用程序变得更方便.调试器支持断点.变量和表达式. 类的动态预加载用Hot ...

  8. WIFI热点

    1.wifi热点是指把手机的接收GPRS.3G或4G信号转化为wifi信号再发出去,这样手机就成了一个WIFI热点. 2.手机必须有无线AP功能,才能当做热点.有些系统自带建热点这个功能比如IOS(比 ...

  9. sqlite 增删改查

    PersonDao1.java package mm.shandong.com.testsqlsqllite.dao; import android.content.Context; import a ...

  10. 修改mac host

    /etc/hosts 把host 复制到桌面  修改  然后  替换原来的