自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 收藏
  • 关注

原创 《将博客搬至CSDN》

搬一下

2019-12-25 23:33:00 87

原创 C++内存管理-重载内存管理函数

记录学习的点点滴滴,参考侯捷<<C++内存管理>> 我们先重载一下C++的几个内存管理函数 operator new, operator new[], operator delete, operator delete[] 1.创建一个类 class Foo { private: int _id; //4 long _data;//...

2017-11-12 23:41:00 113

原创 C++内存管理-new,delete,new[],placement new的简单使用

技术在于交流、沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 首先,我们先看一下C++应用程序,使用memory的途径如下图所示 C++应用程序中申请内存基于分配器的实现(std::allocator),而分配器基于C++primitives(new,new[]...),c++primitives基于C语言中的malloc/free..,当然越底层的函数效率越高. 那...

2017-10-27 00:01:00 97

原创 STL标准库-Move对容器效率的影响

技术在于交流、沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 C++11新增move()语法(我暂时交错右值引用),在前面我有一篇文章叫 C++11_右值引用简单的介绍了右值引用类的实现,这节我主要介绍一下为什么move()会更高效. 这次主要以一个带右值引用的Person类,和vector做测试 首先我们先实现一个带右值引用的Person类 class Pers...

2017-10-19 01:05:00 363

原创 STL标准库-Tuple

技术在于交流、沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 在前面我介绍过一次tuple,今天在书上也看到了tuple,那就在写一次吧. tuple(元组),他的内部可以放任意类型的变量(有点类似结构体),前面介绍过它的递归继承,这次直接看基本使用吧 1.创建和取出元素 void testTuple() { tuple<string, int, ...

2017-10-16 00:00:00 92

原创 STL标准库-一个万用的hash function

技术在于交流、沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 在前面我介绍过hash的使用,本次主要介绍一下Hash Function Hash Function即获得hash code的函数,根据其获得的hash code放到指定的bucket中,那么为了保证其hash的效率我们应尽量避免碰撞,所以hash Function所产生的hash code应足够的乱 下面介绍...

2017-10-14 13:44:00 282

原创 STL标准库-迭代器适配器

技术在于交流、沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 这次主要介绍一下迭代器适配器.以reverse_iterator(反向迭代器),insert_iterator(插入迭代器),ostream_iterator(输出迭代器)迭代器和算法中的copy函数做参考 迭代器适配器主要运用包含及操作符重载实现(主要操作符重载有operator*,operator=,oper...

2017-10-09 21:51:00 132

原创 STL标准库-容器适配器

技术在于交流、沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 上一节介绍了仿函数适配器,这节主要介绍容器适配器和迭代器适配器的概念,其实容器适配器和迭代器其适配器就是封装了一些其他class的方法,非常好理解. 如果你想让一个calss拥有另一个class的功能,你都可以这样做:1.继承 2.包含 迭代器适配器 运用继承方式,实现适配功能,其实现与仿函数适...

2017-09-28 00:40:00 101

原创 STL标准库-仿函数与仿函数适配器

技术在于交流、沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 概要: 1.仿函数 2.bind2nd() 3.not1() 4.bind() 仿函数的实现:声明一个类,重载它的operator call ("()"操作符) template<typename T> class lineFeed { public: void...

2017-09-26 00:18:00 92

原创 STL标准库-算法-常用算法

技术在于交流、沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 介绍11种STL标准库的算法,从这11种算法中总结一下算法的基本使用 1.accumulate() 累加 2.for_each()for一段区间 做你指定的行为 3.replace(), replace_if(), replace_copy() 替换函数 4.count(), count_if() 计数 ...

2017-09-25 21:53:00 157

原创 STL标准库-迭代器

技术在于交流、沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 本节主要介绍STL六大部件中的Iterators迭代器. 在语言方面讲,容器是一个class template, 算法是一个仿函数,分配器classtemplate,迭代器是一个classtemplate, 适配器classtemplate, 分配器classtemplate 从图中我们可以看出...

2017-09-24 00:24:00 101

原创 STL标准库-容器-unordered_set

技术在于交流、沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 unordered_set与与unordered_map相似,这次主要介绍unordered_set unordered_set它的实现基于hashtable,它的结构图仍然可以用下图表示,这时的空白格不在是单个value,而是set中的key与value的数据包 有unordered_set就一定有unord...

2017-09-21 00:53:00 78

原创 STL标准库-hash

技术在于交流、沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 hash的结构图如下图 oject通过hashfunc转换成hashcode然后插入到相应篮子中 hash同rb_tree是一种底层实现,在实际应用中很少能直接用到,但是做为容器的底层实现,所以了解一下还是很有必要的 hash的作用机制可以理解成一个vector上面挂着一些单向链表,vecotr中的元素(篮子...

2017-09-20 21:31:00 336

原创 STL标准库-容器-rb_tree

技术在于交流、沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 红黑树,关联式容器底层实现(map set),在使用中基本运用不到,但是还是想了解一下他的运作方式 Red_Black tree是平衡二分搜寻树(balanced binary search tree),它是高度平衡的二叉树,这样有利于search和insert. 红黑树提供遍历,如果如果按正常规则(++ite...

2017-09-17 00:46:00 252

原创 STL标准库-容器-map和multimap

技术在于交流、沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 map与multimap为关联容器,结构如下 map底层实现依然是rb_tree 他的data可以改,但是key不能改,因此map仍然具有自动排序的功能 我们无法使用迭代器改变元素的key(const key),但是可以改变元素的data. map的key必须独一无二,multimap的key可以重复 ...

2017-09-15 01:05:00 49

原创 STL标准库-容器-set与multiset

技术在于交流、沟通,转载请注明出处并保持作品的完整性。 set与multiset关联容器 结构如下 set是一种关联容器,key即value,value即key.它是自动排序,排序特点依据key set的key不能相同.multiset的key相同.关联容器的查找效率要高于顺序容器很多很多. set和multiset不提供用来直接存取元素的任何操作函数,取值需要通过迭代器 ...

2017-09-12 23:08:00 77

原创 STL标准库-容器-deque

技术在于交流、沟通,本文为博主原创文章转载请注明出处并保持作品的完整性。 deque双向开口可进可出的容器 我们知道连续内存的容器不能随意扩充,因为这样容易扩充别人那去 deque却可以,它创造了内存连续的假象. 其实deque由一段一段构成 ,他是分段连续,而不是内存连续 当走向段的尾端时候自动跳到下一段 所以支持迭代器++ 操作,自动跳到下一段的方法由operator++...

2017-08-29 23:38:00 116

原创 STL标准库-容器-forward_list

技术在于交流、沟通,本文为博主原创文章转载请注明出处并保持作品的完整性。 forward_list即单向list,功能少额外开销就小.而且只能在前段插入元素 结构如下 一 定义 #include <forward_list> int main(int argc, const char * argv[]) { //a.定义 list&l...

2017-08-29 21:24:00 80

原创 STL标准库-容器-list

技术在于交流、沟通,本文为博主原创文章转载请注明出处并保持作品的完整性。 list表示非连续的内存区域,并通过一对指向首尾元素的指针双向链接起来,从而允许向前和向后两个方向进行遍历.在list的任意位置插入和删除元素的效率都很高. 它的结构 一 定义 头文件#include <vector> #include <iostream> #i...

2017-08-27 23:40:00 62

原创 STL标准库-容器-vector

技术在于交流、沟通,本文为博主原创文章转载请注明出处并保持作品的完整性。 向量容器vector是一个动态数组,内存连续,它是动态分配内存,且每次扩张的原来的二倍. 他的结构如下 一 定义 vector< 类型 > 标识符(最大容量,初始所有值) vector是一种类模板,那么他有很多行为与类相似 头文件#include <vector&gt...

2017-08-25 00:05:00 132

原创 C++面向对象高级编程(九)Reference与重载operator new和operator delete

摘要: 技术在于交流、沟通,转载请注明出处并保持作品的完整性。 一 Reference 引用:之前提及过,他的主要作用就是取别名,与指针很相似,实现也是基于指针. 1.引用必须有初值,且不能引用nullptr 2.引用之后不能再引用别人 3.引用通常不用于声明变量,多用于参数类型,和返回值类型 见下面代码 int main(int argc, const ch...

2017-08-20 01:05:00 115

原创 C++面向对象高级编程(八)模板

技术在于交流、沟通,转载请注明出处并保持作品的完整性。 这节课主要讲模板的使用,之前我们谈到过函数模板与类模板 (C++面向对象高级编程(四)基础篇)这里不再说明 1.成员模板 成员模板:参数为template,以下面的代码为例,T1和T2 确定下来后, 后面的U1和U2 仍然可以变化,其实可以直接理解成形参类型不确定 template <class T1,...

2017-08-16 21:26:00 61

原创 C++面向对象高级编程(七)point-like classes和function-like classes

技术在于交流、沟通,转载请注明出处并保持作品的完整性。 1.pointer-like class 类设计成指针那样,可以当做指针来用,指针有两个常用操作符(*和->),所以我们必须重载这两个操作 /*简单实现一下智能指针的*与 -> 操作符*/ template <class T> class shared_ptr_test...

2017-08-14 01:05:00 130 1

原创 C++面向对象高级编程(六)转换函数与non-explicit one argument ctor

技术在于交流、沟通,转载请注明出处并保持作品的完整性。 1.conversion function 转换函数 //1.转换函数 //conversion function //只要你认为合理 你可以任意写转换函数 class Fraction { public: Fraction(int num, int...

2017-08-13 16:55:00 75

原创 C++面向对象高级编程(五)类与类之间的关系

技术在于交流、沟通,转载请注明出处并保持作品的完整性。 本节主要介绍一下类与类之间的关系,也就是面向对象编程先介绍两个术语 Object Oriented Programming OOP面向对象编程 Object Oriented Design OOD面向对象设计 对于类与类之间的关系有很多种,但是我...

2017-08-10 23:14:00 104

原创 C++面向对象高级编程(四)基础篇

技术在于交流、沟通,转载请注明出处并保持作品的完整性。 一.Static 二.模板类和模板函数 三.namespace 一.Static 静态成员是“类级别”的,也就是它和类的地位等同,而普通成员是“对象(实例)级别”的. 类级别的成员,先于该类任何对象的存在而存在,它被该类所有的对象共享. Static 1.修饰变量,该变量时全局变量,其实静态变量不归属于类中,...

2017-08-08 22:12:00 44

原创 C++面向对象高级编程(三)基础篇

技术在于交流、沟通,转载请注明出处并保持作品的完整性。 概要 一.拷贝构造 二.拷贝赋值 三.重写操作符 四.生命周期 本节主要介绍 Big Three 即析构函数,拷贝构造函数,赋值拷贝函数,前面主要围绕不带指针的class complex本节中主要围绕带指针的String类 前面我说过如果你创建的类不带有指针,那么多半你可以不用写析构函数,但是如果你创建了一个...

2017-08-06 14:26:00 54

原创 C++面向对象高级编程(二)基础篇

技术在于交流、沟通,转载请注明出处并保持作品的完整性。 概要 知识点1.重载成员函数 知识点2 . return by value, return by reference 知识点3 重载非成员函数 知识点4 重载操作符 这次主要回忆一下操作符重载. 先看一段代码,后续我会介绍这么做的原由 #include <iostream> class c...

2017-08-05 13:32:00 59

原创 C++面向对象高级编程(一)基础篇

技术在于交流、沟通,转载请注明出处并保持作品的完整性。 概要: 知识点1构造函数与析构函数 知识点2 参数与返回值 知识点3 const 知识点4 函数重载(要与重写区分开) 知识点5 友元 先以C++的两大经典class(complex 不含指针, string 含指针)之一 complex(复数类) 做例子. #ifndef complex_hpp...

2017-08-03 00:35:00 53

原创 C++11_Type Traits

版权声明:本文为博主原创文章,未经博主允许不得转载。 识别变量的type id,返回true或false,举一个简单使用的例子 template <typename T> void type_traits_output(const T& x) { cout << "\ntype traits for type : " <<...

2017-08-01 00:24:00 69

原创 C++11_shared_ptr

版权声明:本文为博主原创文章,未经博主允许不得转载。 shared_ptr智能指针的一种,它的使用类似于auto_ptr. shared_ptr它有两个指针,一个指向引用计数,一个指向data.由于拥有引用计数,所有shared_ptr支持容器. shared_ptr的源码非常复杂这里也不做太多讲解,本文主要介绍一下shared_ptr的基本使用 间接使用 #includ...

2017-07-27 23:39:00 51

原创 C++11_ tuple

版权声明:本文为博主原创文章,未经博主允许不得转载。 tuple 是一个可以装载任何变量的容器,C++11的Variadic Templates给tuple的实现带来了极大方便. tuple的实现基于递归继承,例如 std::tuple<int, float, string> t (41,6.3,"nico"); 结构图如下图 递归继承的优点是,将内存...

2017-07-26 22:34:00 71

原创 C++11_ 右值引用

版权声明:本文为博主原创文章,未经博主允许不得转载。 由于右值所产生的临时变量问题一直是一种诟病,C++11中引入了右值引用这个核心语言机制,来提升运行期性能. 首先我先说明一下什么是左值和右值:左值和右值都是针对表达式而言的,左值是指表达式结束后依然存在的持久对象,右值是指表达式结束时就不再存在的临时对象 int b = 20; //这里b是左值 20是右值 ,...

2017-07-24 23:35:00 57

原创 C++11_ Variadic Templates

版权声明:本文为博主原创文章,未经博主允许不得转载。 这次主要介绍C++11的又一个新特性Variadic Templates (可变模板参数) 它的实现类似于initializer_list<>,它可是使类模板接受一包参数 本节主要应用递归的形式介绍 Variadic Templates 1.简单的调用 #include <iostream> ...

2017-07-19 23:10:00 78

原创 C++11_ Lambda

版权声明:本文为博主原创文章,未经博主允许不得转载。 这次主要介绍C++11的Lambda语法,一个非常给力的语法 1.组成 :[...导入符号](...参数)mutable(可改写) throwSpec(抛出异常) ->retType(返回值){...} 2.最简单的Lamdba #include <iostream> int main...

2017-07-19 00:16:00 46

原创 C++11_新语法

版权声明:本文为博主原创文章,未经博主允许不得转载。 本节主要介绍C++的新特性,对于C++的基础语法不再讲解.由于编译器的不同.在某些地方可能有些差异,但是无太大影响. 讲解本节知识之前先确认你的C++支持度[__cplusplus] #include <iostream> int main(int argc, const char * argv[]) { ...

2017-07-17 23:39:00 113

原创 MoreEffectiveC++Item35 条款27: 要求或禁止对象产生于heap中

一 要求对象产生在heap中 阻止对象产生产生在non-heap中最简单的方法是将其构造或析构函数声明在private下,用一个public的函数去调用起构造和析构函数 class UPNumber { public: UPNumber(); UPNumber(int initValue); UPNumber(double initValue); ...

2017-06-13 00:10:00 103

原创 MoreEffectiveC++Item35 条款26: 限制某个class所能产生的对象个数

一 允许零个或一个对象 我们知道每当即将产生一个对象,我们有一个constructor被调用,那么我们现在想组织某个对象的产生,最简单的方法就是将其构造函数声明成private(这样做同事防止了这个类被继承) class PrintJob; class Printer { public: void submitJob(const PrintJob& job)...

2017-06-07 00:22:00 76

原创 MoreEffectiveC++Item35 条款25 将constructor和non-member functions虚化

1.virtual constructor 在语法上是不可将构造函数声明成虚函数,虚函数用于实现"因类型而异的行为",也就是根据指针或引用所绑定对象的动态类型而调用不同实体.现在所涉及的 virtual-constructor实际上是"仿virtual-constructor. 假设你设计一个软件,用来处理新闻事件,它由文字和图形构成 class NLComponent { ...

2017-06-04 23:33:00 95

原创 MoreEffectiveC++Item35(效率)(条款16-24)

条款16 谨记80-20法则 条款17 考虑使用 lazy evaluation(缓释评估) 条款18 分期摊还预期的计算成本 条款19 了解临时对象的来源 条款20 协助完成"返回值的优化"("RVO" return value optimization) 条款21 利用重载技术(overload)避免隐式类型转换(implicit type conversion) ...

2017-05-22 23:13:00 103

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除