随笔分类 -  C++

函数对象、 函数对象与容器、函数对象与算法
摘要:一、函数对象 1、函数对象(function object)也称为仿函数(functor) 2、一个行为类似函数的对象,它可以没有参数,也可以带有若干参数。 3、任何重载了调用运算符operator()的类的对象都满足函数对象的特征 4、函数对象可以把它称之为smart function。 5、ST 阅读全文

posted @ 2018-02-26 08:57 AlanTu 阅读(324) 评论(0) 推荐(0) 编辑

剩下5种算法代码分析与使用示例(remove 、rotate 、sort、lower_bound、accumulate)
摘要:一、移除性算法 (remove) C++ Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 4 阅读全文

posted @ 2018-02-26 08:55 AlanTu 阅读(329) 评论(0) 推荐(0) 编辑

变动性算法源代码分析与使用示例(copy_backward、 transform、 replace_copy_if 等)
摘要:首先回顾前面的文章,我们把for_each 归类为非变动性算法,实际上它也可以算是变动性算法,取决于传入的第三个参数,即函数 指针。如果在函数内对容器元素做了修改,那么就属于变动性算法。 变动性算法源代码分析与使用示例: 一、copy、copy_backward C++ Code 1 2 3 4 5 阅读全文

posted @ 2018-02-26 08:53 AlanTu 阅读(403) 评论(0) 推荐(0) 编辑

非变动性算法源代码分析与使用示例( for_each、min_element 、find_if、search 等)
摘要:非变动性算法代码分析与示例: 一、for_each C++ Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 // TEMPLATE FUNCTION for_each template < class _InIt, class _Fn1 > inline _Fn1 for 阅读全文

posted @ 2018-02-26 08:51 AlanTu 阅读(303) 评论(0) 推荐(0) 编辑

迭代器类vector::iterator 和 vector::reverse_iterator 的实现、迭代器类型、常用的容器成员
摘要:一、迭代器 迭代器是泛型指针 普通指针可以指向内存中的一个地址 迭代器可以指向容器中的一个位置 STL的每一个容器类模版中,都定义了一组对应的迭代器类。使用迭代器,算法函数可以访问容器中指定位置的元素,而无需关心元素的具体类型。 下面来稍微看一下vector<class>::iterator 和 v 阅读全文

posted @ 2018-02-26 08:49 AlanTu 阅读(2137) 评论(0) 推荐(0) 编辑

算法简介、7种算法分类
摘要:一、算法 算法是以函数模板的形式实现的。常用的算法涉及到比较、交换、查找、搜索、复制、修改、移除、反转、排序、合并等等。 算法并非容器类型的成员函数,而是一些全局函数,要与迭代器一起搭配使用。 算法的优势在于只需实作一份,可以适应所有的容器,不必为每一种容器量订制。也可以与用户定义的容器搭配。 算法 阅读全文

posted @ 2018-02-26 08:49 AlanTu 阅读(4848) 评论(0) 推荐(0) 编辑

实现简单容器模板类Vec(vector capacity 增长问题、allocator 内存分配器)
摘要:首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下: C++ Code 1 2 template < class _Ty, class _Ax = allocator<_Ty> > class vector; 但在VC2008 中vector 阅读全文

posted @ 2018-02-26 08:47 AlanTu 阅读(806) 评论(0) 推荐(0) 编辑

STL六大组件简介
摘要:一、STL简介 (一)、泛型程序设计 泛型编程(generic programming) 将程序写得尽可能通用 将算法从数据结构中抽象出来,成为通用的 C++的模板为泛型程序设计奠定了关键的基础 (二)、什么是STL 1、STL(Standard Template Library),即标准模板库,是 阅读全文

posted @ 2018-02-26 08:44 AlanTu 阅读(1956) 评论(0) 推荐(0) 编辑

用模板实现单例模式(线程安全)、模板方式实现动态创建对象
摘要:一、用模板实现单例模式 在前面的文章中,用过多种方法实现单例模式,现在用模板方式来实现: 为了实现线程安全,需要在linux 下使用pthread_mutex_t 加锁,请使用g++ 编译并需要链接 -lpthread 使用的是double-check lock, 指针instance_ 最好声明为 阅读全文

posted @ 2018-02-26 08:43 AlanTu 阅读(999) 评论(0) 推荐(0) 编辑

缺省模板参数(借助标准模板容器实现Stack模板)、成员模板、关键字typename
摘要:一、缺省模板参数 回顾前面的文章,都是自己管理stack的内存,无论是链栈还是数组栈,能否借助标准模板容器管理呢?答案是肯定的,只需要多传一个模板参数即可,而且模板参数还可以是缺省的,如下: template <typename T, typename CONT = std::deque<T> > 阅读全文

posted @ 2018-02-26 08:42 AlanTu 阅读(357) 评论(0) 推荐(0) 编辑

类模板、Stack的类模板实现(自定义链栈方式,自定义数组方式)
摘要:一、类模板 类模板:将类定义中的数据类型参数化 类模板实际上是函数模板的推广,可以用相同的类模板来组建任意类型的对象集合 (一)、类模板的定义 template <类型形参表> class <类名> { //类说明体 }; template <类型形参表> <返回类型> <类名> <类型名表>::< 阅读全文

posted @ 2018-02-25 23:39 AlanTu 阅读(1044) 评论(0) 推荐(0) 编辑

函数模板、函数模板特化、重载函数模板、非模板函数重载
摘要:一、引子 考虑求两数较大值函数max(a,b) 对于a,b的不同类型,都有相同的处理形式: return a < b ? b : a; 用已有方法解决: (1)宏替换 #define max(a,b) ((a)< (b) ? (b) : (a)) 存在的问题:避开类型检查 (2)重载 存在的问题:需 阅读全文

posted @ 2018-02-25 23:38 AlanTu 阅读(919) 评论(0) 推荐(0) 编辑

输出流格式化(以操纵子方式格式化,以ios类成员函数方式格式化)
摘要:一、以操纵子方式格式化 数据输入输出的格式控制使用系统头文件<iomanip>中提供的操纵符。把它们作为插入操作符<<的输出对象即可。如setiosflags、setw、setfill、setprecision、hex、oct等。 (一)、常用的流操纵算子: (二)、ios类的枚举常量 C++ Co 阅读全文

posted @ 2018-02-25 23:36 AlanTu 阅读(648) 评论(0) 推荐(0) 编辑

文件的读写、二进制文件的读写、文件随机读写
摘要:一、文件的读写 如前面所提,流的读写主要有<<, >>, get, put, read, write 等操作,ofstream 继承自ostream, ifstream 继承自 istream,故操作函数都是一致的。 C++ Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 阅读全文

posted @ 2018-02-25 23:35 AlanTu 阅读(2949) 评论(0) 推荐(0) 编辑

文件流(fstream, ifstream, ofstream)的打开关闭、流状态
摘要:一、文件流 ofstream,由ostream派生而来,用于写文件 ifstream,由istream派生而来, 用于读文件 fstream,由iostream派生而来,用于读写文件 二、打开文件 说明了流对象之后,可使用函数open()打开文件。文件的打开即是在流与文件之间建立一个连接 函数原型 阅读全文

posted @ 2018-02-25 23:34 AlanTu 阅读(13212) 评论(0) 推荐(0) 编辑

流类库继承体系(IO流,文件流,串流)和 字符串流的基本操作
摘要:一、IO、流 数据的输入和输出(input/output简写为I/O) 对标准输入设备和标准输出设备的输入输出简称为标准I/O 对在外存磁盘上文件的输入输出简称为文件I/O 对内存中指定的字符串存储空间的输入输出简称为串I/O 数据输入输出的过程,可以形象地看成流 从流中获取数据的操作称为“提取”( 阅读全文

posted @ 2018-02-25 23:32 AlanTu 阅读(671) 评论(0) 推荐(0) 编辑

对象语义与值语义、资源管理(RAII、资源所有权)、模拟实现auto_ptr<class>、实现Ptr_vector
摘要:一、对象语义与值语义 1、值语义是指对象的拷贝与原对象无关。拷贝之后就与原对象脱离关系,彼此独立互不影响(深拷贝)。比如说int,C++中的内置类型都是值语义,前面学过的三个标准库类型string,vector,map也是值语义 2、对象语义指的是面向对象意义下的对象 对象拷贝是禁止的(Noncop 阅读全文

posted @ 2018-02-25 23:31 AlanTu 阅读(359) 评论(0) 推荐(0) 编辑

operator new 和 operator delete 实现一个简单内存泄漏跟踪器
摘要:先来说下实现思路:可以实现一个Trace类,调用 operator new 的时候就将指向分配内存的指针、当前文件、当前行等信息添加进Trace 成员map容器内,在调用operator delete 的时候删除这些信息。定义一个全局Trace 对象,当程序结束,对象析构时判断成员map 是否还有信 阅读全文

posted @ 2018-02-25 23:28 AlanTu 阅读(361) 评论(0) 推荐(0) 编辑

异常与继承、异常与指针、异常规格说明
摘要:一、异常与继承 如果异常类型为C++的类,并且该类有其基类,则应该将派生类的错误处理程序放在前面,基类的错误处理程序放在后面 C++ Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 阅读全文

posted @ 2018-02-25 23:26 AlanTu 阅读(475) 评论(0) 推荐(0) 编辑

程序错误、异常(语法、抛出、捕获、传播)、栈展开
摘要:一、程序错误 编译错误,即语法错误。程序就无法被生成运行代码。 运行时错误 不可预料的逻辑错误 可以预料的运行异常 例如: 动态分配空间时可能不会成功 打开文件可能会失败 除法运算时分母可能为0 整数相乘可能溢出 数组越界…… 二、异常 (一)、异常语法 throw 表达式; try { //try 阅读全文

posted @ 2018-02-25 23:25 AlanTu 阅读(1079) 评论(0) 推荐(0) 编辑

导航