自定义博客皮肤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 90

原创 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 115

原创 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 98

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

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

2017-10-19 01:05:00 371

原创 STL标准库-Tuple

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

2017-10-16 00:00:00 92

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

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

2017-10-14 13:44:00 286

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

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

2017-10-09 21:51:00 140

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

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

2017-09-28 00:40:00 103

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

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

2017-09-26 00:18:00 93

原创 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 159

原创 STL标准库-迭代器

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

2017-09-24 00:24:00 102

原创 STL标准库-容器-unordered_set

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

2017-09-21 00:53:00 79

原创 STL标准库-hash

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

2017-09-20 21:31:00 341

原创 STL标准库-容器-rb_tree

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

2017-09-17 00:46:00 254

原创 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 51

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

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

2017-09-12 23:08:00 78

原创 STL标准库-容器-deque

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

2017-08-29 23:38:00 121

原创 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 82

原创 STL标准库-容器-list

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

2017-08-27 23:40:00 65

原创 STL标准库-容器-vector

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

2017-08-25 00:05:00 135

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

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

2017-08-20 01:05:00 120

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

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

2017-08-16 21:26:00 63

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

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

2017-08-14 01:05:00 140 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 79

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

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

2017-08-10 23:14:00 106

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

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

2017-08-08 22:12:00 46

原创 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 62

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

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

2017-08-03 00:35:00 54

原创 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 72

原创 C++11_shared_ptr

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

2017-07-27 23:39:00 52

原创 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 78

原创 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 Templates1.简单的调用#include <iostream>...

2017-07-19 23:10:00 84

原创 C++11_ Lambda

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

2017-07-19 00:16:00 49

原创 C++11_新语法

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

2017-07-17 23:39:00 119

原创 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 105

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

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

2017-06-07 00:22:00 79

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

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

2017-06-04 23:33:00 96

原创 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 104

空空如也

空空如也

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

TA关注的人

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