要想深入的理解STL的迭代器、分配器等,就必须了解C++模板编程中的一个技巧——Traits。
1、问题的提出
C++的模板特性为泛型编程提供了支持。这样我们就可以编写更加通用的代码,而不必过分去关心参数的类型。然而事实却是,类型的不同,很多时候却影响到了算法中的某个小小的实现。举个标准库里的类string,wstring。
其实它们对应的是两个模板,前者单字符,后者宽字符。...
分类:
编程语言 时间:
2015-05-10 11:29:03
阅读次数:
231
要想深入的理解STL的迭代器、分配器等,就必须了解C++模板编程中的一个技巧——Traits。1、问题的提出C++的模板特性为泛型编程提供了支持。这样我们就可以编写更加通用的代码,而不必过分去关心参数的类型。然而事实却是,类型的不同,很多时候却影响到了算法中的某个小小的实现。举个标准库里的类stri...
分类:
编程语言 时间:
2015-05-10 11:14:31
阅读次数:
353
类模板是类的抽象,类是类模板的实例。
声明类模板:template//可声明多个类型参数
关于类模板的使用谨记一点。用类模板实例化的类中实参数类型去代替声明时的类型参数名。
如声明:template
class Compare
{
public:
Compare(T1 a,T2 b):x(a),y(b){};
void display();
private:
...
分类:
编程语言 时间:
2015-04-04 13:43:42
阅读次数:
152
之前写过一篇博客是教你几种基本的常见排序算法 ,就说到会有后续的文章出来,继续写写排序问题,参加一些公司的电话面试,还总是会问到写关于排序的问题,大多是关于堆排序,快排序或者海量数据排序,或者从很到的数字序列中找到些中间位置的数字,或者是前K个最小的数字等相关问题,今天正好有空写了写堆排序的代码,自己存储一下,也拿出来共享给大家!
堆排序的算法思路,网上一搜索一堆,本科的课本里面也有较为详细的讲解...
分类:
编程语言 时间:
2015-03-21 23:00:13
阅读次数:
307
在C++中通过虚函数,模板编程和RTTI技术可以实现多态。关于虚函数和模板编程不再赘述,下面来介绍RTTI技术。
所谓RTTI技术,是Run Time Type Infomation的缩写,即运行时类型信息。它提供了运行时确定对象类型的方法。对于大多数人而言,可能都不知道在C++中还有RTTI。其实在C++编程中有时候不可避免地需要对对象类型进行动态判断,那么如何确定对象的动态类型呢? 答...
分类:
其他好文 时间:
2015-03-03 23:45:14
阅读次数:
173
STL源码分析—使用的一些特殊语法
关于泛型编程中用到的一些特殊语法,这些语法也适用于平常的模板编程
1、 类模板中使用静态成员变量
Static成员变量在类模板中并不是很特殊,同时这个变量不属于对象,属于实例化以后的这个类类型。每一个实例化对应一个static变量
2、 类模板中可以再有模板成员
3、 模板参数可以根据前一个模板参数而设定默认值
4、 类模板可以拥有非类型的模...
分类:
其他好文 时间:
2014-12-26 13:03:06
阅读次数:
170
右值引用,是 C++11 语言核心中最为重要的改进之一。右值引用给 C++ 带来了“Move语义”(“转移语义”),同时解决了模板编程中完美转发的问题(Perfect forwarding)。右值引用使 C++ 对象有能力甄别什么是(可以看作)临时对象,对于临时对象的拷贝可以做某种特别的处理,一般来...
分类:
编程语言 时间:
2014-12-19 23:14:24
阅读次数:
418
Traits不是一种语法特性,而是一种模板编程技巧。Traits在C++标准库,尤其是STL中,有着不可替代的作用。 如何在编译期间区分类型 下面我们看一个实例,有四个类,Farm、Worker、Teacher和Doctor,我们需要区分他们是脑力劳动者还是体力劳动者。以便于做出不同的行动。 这里的...
分类:
其他好文 时间:
2014-11-26 01:25:33
阅读次数:
237
1.熟悉RUP,XP开发过程,精通软件设计原则和设计模式,习惯重构,熟悉UML以及相关工具,能熟练使用Rose,Visio等设计工具;2.C++基础,算法基础,熟悉MFC和STL,模板编程;3.精通VC++,能熟练使用2010开发环境;4.精通ATL和WTL,熟悉COM等,可以基于DirectX开发...
分类:
其他好文 时间:
2014-10-31 20:38:42
阅读次数:
299
关键字 typename在C++标准化过程中,引入关键字typename是为了说明;模板内部的标识符可以是一个类型。譬如下面的例子:templateclass MyClass{ typename T::SubType *ptr; ...}; 上面的程序中,第2个typename被用来说...
分类:
其他好文 时间:
2014-10-29 19:20:40
阅读次数:
187