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. gcd和ex_gcd

    gcd就是欧几里得算法,可以快速的求出俩个数的最大公因数,进而也可以求其最大公倍数(俩数之积除以最大公因数),比较简单直接看代码就好了,一般用递归版,简短精简,敲得快,但如果数剧奇葩,怕溢出,那就用递 ...

  2. Oracle的AWR报告分析

    * 定义:awr报告是oracle 10g下提供的一种性能收集和分析工具,它能提供一个时间段内整个系统资源使用情况的报告,通过这个报告,我们就可以了解一个系统的整个运行情况,这就像一个人全面的体检报告 ...

  3. HTML中表单提交数据GET、POST的区别

    表单提交数据Get和Post的区别: GET和POST是表单提交数据其中的两种方式,除此之外还有PUT.DELETE等. GET: GET的请求起因于正常的URL请求,或是没有指定METHOD的HTM ...

  4. C#遍历得到checkboxlist选中值和设置选中项

    得到选中项的value值并拼接成一个字符串返回 public string GetChecked(CheckBoxList checkList, string separator) { string ...

  5. CSS常用样式(四)之animation

    上篇CSS常用样式(三)这篇博文中已经介绍过了CSS中具有动画效果的transition.transform,今天来大概说说CSS中的animation.animation的加入会使得动画效果更加乐观 ...

  6. SharePoint 2013 为站点配置基于主机标头的双域名

    SharePoint的应用中,经常需要配置双域名,为不同的认证方式提供访问入口,下面简单介绍下,如何以主机标头的方式为SharePoint配置双域名: 配置基于主机标头的双域名 1.原本可以访问的测试 ...

  7. Linux新手扫盲

    一. Linux特点 1.免费/开源: 2.支持多线程/多用户: 3.安全性好: 4.对内存和文件管理优越. Linux最小只需4M ——> 嵌入式开发 二. 文件目录 Linux系统所有软硬件 ...

  8. Android九宫格界面实现点击每个格点击跳转界面

    刚开始有个任务就是做一个九宫格界面,后来有个任务就是实现点击每个格并跳转界面实现每个格的功能.下面我就介绍一下我是如何实现该功能的 首先写一下我的想法是: 登录成功后显示一个九宫格界面,每个九宫格的每 ...

  9. TextView显示颜色高亮的问题

    TextView textView = (TextView) findViewById( R.id.tv ); String text = "<font color=\"#d ...

  10. Oracle与MySQL的区别

    1. Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高. 2. Oracle支持大并发,大访 ...