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. 泛函编程(38)-泛函Stream IO:IO Process in action

    在前面的几节讨论里我们终于得出了一个概括又通用的IO Process类型Process[F[_],O].这个类型同时可以代表数据源(Source)和数据终端(Sink).在这节讨论里我们将针对Proc ...

  2. nginx和apache的比较

    1.nginx的IO是非阻塞的,apache的IO是阻塞的. nginx accept一个连接以后会把它放到EPOLL的消息循环中,APACHE需要启动一个线程,当系统线程达到瓶颈以后,会阻塞网络IO ...

  3. get/post时中文乱码问题的解决办法

    1.文章1 最近遇到一个问题:用get方法传递中文有问题,用post没有问题. 问题简单的描述是这样的: <a href="userGroup.jsp?userGroupName=&l ...

  4. 【局部特征】ASIFT

    由于相机正面白摄物体时,相机的光轴方向可能发生变化,带来扭曲.而SIFT算法虽具有完全的尺度不变性,但不具有完全的仿射不变性,对拍摄角度发生大角度空间变化的图像特征提取有一定的局限性.ASift通过模 ...

  5. testng对失败时截图处理

    1.截图类: public class ScreenShot { public WebDriver driver; public ScreenShot(WebDriver driver) { this ...

  6. 让.NET 4.0支持TLS1.2协议

    The default System.Net.ServicePointManager.SecurityProtocol in both .NET 4.0/4.5 is SecurityProtocol ...

  7. WinDbg调试.NET程序入门

    俗话说:万事开头难! 自从来到新公司遇到性能问题后,需要想办法解决这个问题,但是一直没有合适的性能分析工具,然后找到StevenChennet 大神帮忙,他用WinDbg工具远程帮我分析了一个 dum ...

  8. 当执行sudo时提示“is not in the sudoers file”的解决方案:

    出现这种提示是由于普通用户帐号没有权限执行sudo命令,所以需要切换到root身份进行颁发权限: $su -(注意有- ,这和su是不同的,在用命令"su"的时候只是切换到root ...

  9. Xamarin安装和跳坑指南

    安装Checklist 注意:本文只描述安装过程,由于组件的版本更新很快,为保证文章时效性,不提供下载链接,也尽可能不指明具体版本. 安装Visual Studio 2015进行默认安装,除非已经FQ ...

  10. PHP 后台定时循环刷新某个页面 屏蔽apache意外停止

    PHP 后台定时循环刷新某个页面 如果间隔时间过长的话  会出现apache自动停止的现象.出现的原因则是设置了 <IfModule mpm_winnt_module> ThreadsPe ...