C++模板实战
文章平均质量分 81
liuxuejiang158
做点笔记,省的百度不到。。。
展开
-
C++模板实战2:模板类
1 借助函数模板可以使算法脱于具体数据类型之外,借助模板类可以使数据结构脱于具体数据类型之外,从而专注于数据存取方法及数据间的关联方式,抽象的数据结构可以和具体数据类型无关。类模板和函数模板一样以template开头,但是类模板实例化和函数模板实例化有一点不太一样,函数模板可以从函数参数自动推导模板参数从而可以省略模板参数的书写,而类模板即使有默认模板参数其 one;其中采用默认模板原创 2013-12-29 17:10:07 · 1983 阅读 · 0 评论 -
C++模板实战3:模板参数
模板参数可以是class,也可以是:整数及枚举类型、指向对象或函数的指针、对象或函数的引用、对象成员的指针。 1 整数模板参数,但是必须是编译期常量,实例如下:#include#includeusing namespace std;templateclass array{//具备越界检查的数组 public: T& operator[](unsig原创 2013-12-29 21:14:48 · 1603 阅读 · 0 评论 -
C++模板实战4:模板特化
模板设计的目的就是为了通用,但是某些情形下也有特殊情形独立于通用规则,因此模板需要针对特殊情形进行特化。1 类模板的特化,在模板类名自后这部分叫做匹配式,如下:template//通用模板void show();template不能省略void show();//特化模板,其中叫匹配式特化规则如下: 1) 匹配式写在模板类名之后,用也不能省略 2) 匹配式内用逗号隔开原创 2013-12-30 13:17:11 · 1919 阅读 · 0 评论 -
C++模板实战5: 迭代器与容器
一份带有迭代器的双向链表实现:#include#include_Pragma ("once")template class List;templateclass Iterator{ public: using value_type=typename N::value_type; using reference_type=typename N::原创 2013-12-31 09:38:08 · 1318 阅读 · 0 评论 -
C++模板实战6:迭代器
1 迭代器的类型: 输入迭代器 、前向迭代器、双向迭代器、跳转迭代器以及输出迭代器。这五种迭代器的限制条件从左至右越来越强。2 输入迭代器需满足的条件:X u(a);X可复制构造u=a;可赋值u==a;可比较相等u!=a;可比较不相等*u;可去引用,且若有u==a,*u==*a原创 2014-01-02 17:26:31 · 2625 阅读 · 0 评论 -
C++模板实战7:标准库算法
标准库算法是函数模板,在这里列举部分库算法:1 搜索算法都是成功时返回第一个满足条件的位置,失败时返回末端迭代器。1) find(i,j,v)//搜索[i,j)中第一个等于val的位置2) find_if(i,j,pred)//搜索序列[i,j)中第一个使pred为true的元素位置3) find_if_not(i,j,pred)//搜索序列[i,j)中第一个使pred原创 2014-01-03 11:14:24 · 1568 阅读 · 0 评论 -
C++模板实战8:矩阵乘法
矩阵乘法采用迭代器实现,矩阵采用行优先方式存储,其关键操作是“行×列”,该操作分成三部分:行由一个迭代器完成移动,列有一个列迭代器完成移动,乘法采用transform完成其中需要一个累加操作有累加迭代器完成1 矩阵乘法中涉及到行×列,若矩阵采用行优先方式存储,那么行的移动相对简单,列的移动相对复杂一点,针对列移动采用一个迭代器实现,如下:// 文件名:skip_iterator.hpp#原创 2014-01-03 15:39:35 · 2576 阅读 · 0 评论 -
C++模板实战9:标签和策略类
1 在设计矩阵与矩阵相乘时后有三种情形:矩阵×矩阵,向量×矩阵,矩阵×向量。如果采用模板设计矩阵乘法并不能通过模板参数特化区分出三种情形,因为模板参数本身没有任何约束,导致无法区分重载。可以采用标签的方式分辨重载,标签是一个空类,其目的是为声明一种独特的类型用于分辨重载,不同的标签之间可以继承。在模板实例化时首先提取标签类型,根据标签类型调用具体的模板。实例如下:// 矩阵与向量标签stru原创 2014-01-03 21:41:19 · 1910 阅读 · 0 评论 -
C++模板实战1:函数模板
模板本身不是可编译的代码,而是用来指导编译器生成可编译代码的文本。1 函数模板参数 函数模板参数可以根据模板实参自动推导,也就是说可以从实参自动推导的模板参数可以省略书写,但是要注意以下几个规则:1) 编译器只根据函数调用时给出的实参列表推导模板参数值,与函数参数无关的模板参数无法推导2) 与函数返回值相关的模板参数其值也无法推导3) 所有可推导模板参数必须是连续位于原创 2013-12-28 11:02:54 · 1671 阅读 · 0 评论