STL的中心思想在于:将数据容器与算法分开,独立设计,再用一帖粘着剂将它们撮合在一起。而扮演粘着剂这个角色的就是迭代器。容器和算法泛型化,从技术角度来看并不困难,C++的模板类和模板函数可分别达成目标,但如何设计出两者之间良好的粘着剂,才是大难题。 我们可以来尝试一下自己设计一个迭代器,看途中会遇到 ...
分类:
其他好文 时间:
2019-10-21 20:40:56
阅读次数:
102
函数特化抓哟解决模板函数不能解决的问题,如: template ; T int (T a,T b){ return cout<<a>b?a:b<<endl; } 若a与b是字符型等无法进行比较,像这类问题我们将需要对函数模板进行特化, 函数模板特化形式为: template <> 特化返回类型 模板 ...
分类:
其他好文 时间:
2019-10-15 11:39:38
阅读次数:
127
使用模板函数可以将处理数据的算法进行泛化。泛化的好处是可以将一种算法应用到多种不同的数据上,从而避免相同逻辑的无意义重复,减少代码量。但是对于某些类型应用某个函数模板可能并不合适,此时就可以针对该数据类型对函数模板进行特化处理。 在程序使用函数模板,实际上是使用该模板的实列。在程序编译过程中,编译其 ...
分类:
其他好文 时间:
2019-10-15 11:37:05
阅读次数:
95
什么是模板?就是告诉编译器一个模子,让编译器根据不同的类型生成不同的代码。编写与类型无关的函数,是代码复用的一种手段。函数模板template<typenameT>voidSwap(T&left,T&right){Ttemp=left;left=right;right=temp;}用这种方式定义函数模板就完成了代码的复用,模板函数工作的原理就是在编译阶段编译器对传入的实
分类:
其他好文 时间:
2019-10-11 00:45:26
阅读次数:
92
utility: stl_relops.h : 内部提供了重载模板operator!=、operator>、operator=,而这几个模板函数内部使用到了operator==以及operator其中T*为 申请到的空间地址,第二个参数为实际分配到的空间大小;最大可申请大小为INT_MAX / si... ...
分类:
其他好文 时间:
2019-10-10 12:58:02
阅读次数:
93
stl_construct.h : 提供多种构造器、销毁器模板函数; 构造器construct提供了给定值构造和默认构造方式,通过调用重载函数_Construct实现; 销毁器destroy提供了销毁指针和迭代器的方式,通过调用重载函数_Destroy实现; _Construct:通过“放置”new... ...
分类:
其他好文 时间:
2019-10-10 12:56:57
阅读次数:
138
在includes.h中定义,应该是全局函数,作用是打印入参: 可根据不同平台修改打印函数,这里是Qt平台,使用的是qDebug,也可以C++的std::cout 使用: ...
分类:
其他好文 时间:
2019-10-09 12:52:37
阅读次数:
78
一. make系列函数 (一)三个make函数 1. std::make_shared:用于创建shared_ptr。GCC编译器中,其内部是通过调用std::allocate_shared来实现的。 2. std::make_unique:C++14中加入标准库。 3. std::allocate ...
分类:
其他好文 时间:
2019-10-05 22:25:39
阅读次数:
129
①首先,实例化从字面上来看就是产生一个实际的事物。在函数模板中就是产生一个特定的函数定义,例如有一个swap函数: template<typename T> void swap(T& a,T& b) {…} 使用模板,并不意味着我们生成了一系列的函数定义,而是一种方案,当我们传递类型进入的时候才生成 ...
分类:
其他好文 时间:
2019-09-20 21:23:33
阅读次数:
129