自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++并发编程实战第6章问题

C++并发编程实战第6章,代码清单6.4队列实现——单线程版template<typename T>class queue{private: struct node { T data; std::unique_ptr<node> next; node(T data_): data(std::move(data_)) {...

2018-04-07 20:12:28 385

转载 C++矩阵库 Eigen 快速入门

出处:https://www.cnblogs.com/python27/p/EigenQuickRef.html最近需要用 C++ 做一些数值计算,之前一直采用Matlab 混合编程的方式处理矩阵运算,非常麻烦,直到发现了 Eigen 库,简直相见恨晚,好用哭了。 Eigen 是一个基于C++模板的线性代数库,直接将库下载后放在项目目录下,然后包含头文件就能使用,非常方便。此外,Eig

2018-01-16 19:54:38 471

原创 LeetCode Two Sum时间复杂度O(n)解法尝试版本2

上一版考虑掉了vector中的值可能是负值的情况,所以不能完全解题。但是可以将vector中每个数都变成正数,这样就不会出现非法下标了。有两种方式可以选择1、给vector中每个数加上1个足够大的正值,相当于使坐标偏移,让成为HashTable的数组下标的vector中的每个值散布于0及其以上 2、取绝对值方式2首先排除,因为vector中要是存在绝对值相同但是符号不同(一正一负)的两个数

2018-01-10 12:43:21 944

原创 字符串分割渣渣版本,适用于任何字节类型字符

以某个字符串为分割标志将字符串分割#include #include #include template int Divid(const std::basic_string& sTContent, const std::basic_string& TDiv, std::list>& listTString){ if( true == TDiv.empty() ) { re

2017-12-29 21:41:51 397

转载 深入探索C++对象模型一书中拷贝构造函数和NRV关系探讨

转自:http://blog.guorongfei.com/2016/01/11/cpp-copy-constructor-nrv/最近深入探索C++对象模型一书,对于P67中最后一段话的第一句非常不解这个程序的第一个版本不能实施 NRV 优化,因为 test class 缺少一个 copy constructor从这段文字来看如果没有拷贝构造函数就不会有 NR

2017-12-26 20:54:36 410

原创 关于虚表的疑惑与证实

一直以来都有一个困惑,但从未动手去证实,就是关于含虚函数的同一类的每个对象各有一张虚表吗?今天突然有了一些想法,于是决定先提出自己的想法,并且顺便证实一下,先来假设每个对象各有一张虚表1、如果有类中有很多虚函数,那么虚表就可能很大,如果每个对象都有一个独立的虚表,那么消耗的内存会非常大,C++的设计者应该不会如此糊涂,假设不成立2、如果即使一个虚函数被重写无数次,在某个特定

2017-12-23 23:03:00 371

原创 LeetCode Two Sum时间复杂度O(n)解法尝试版本1

题目如下:Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution, and you may not us

2017-11-17 20:23:15 747

原创 模板与特立独行的VS

双十一前夕买的书到了,其中一本便是C++ Templates,书比较老了但依旧经典,周末的时候翻看了下,感觉挺好。今天在等待代码编译时,突发脑袋里面蹦出了一个疑问,虽然C++标准有规定,模板会被进行两次三阶段的编译,但是什么时候开始对模板进行编译呢(当我把博客写了一半之后发现C++ Templates一书中明确提到了实例化之前就进行语法检查,于是开始继续研究VS到底有多特立独行)?于是我写下了

2017-11-13 21:19:21 276

原创 leetcode Array Partition I

Given an array of 2n integers, your task is to group these integers into n pairs of integer, say (a1, b1), (a2, b2), ..., (an, bn) which makes sum of min(ai, bi) for all i from 1 to n as large a

2017-11-08 21:47:32 229

原创 leetcode二叉树合并非递归版本

迭代+队列的方式,代码如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL)

2017-11-07 13:45:00 551

原创 LeetCode二叉树合并

先上题:Given two binary trees and imagine that when you put one of them to cover the other, some nodes of the two trees are overlapped while the others are not.You need to merge them into a new b

2017-10-19 01:19:22 1124

原创 初出茅庐

先来吐槽一把,不知道为什么,Chrome上不能打开CSDN博客了!目前用的IE不爽今天尝试了下LeetCode上最简单的算法题,题目大概是这样的:判断一个机器人是否回到原点,机器人解析一串输入的字符串,当解析到的字符为'R'时向右走一步,为'L'时向左走一步,为'U'时向上走一步,为'D'时向下走一步,如果机器人返回了原点返回真,否则返回假。这道题确实很简单,根本不用关

2017-10-18 00:36:51 431

转载 《Effective C++》读书摘要

作者:Florian链接:http://www.cnblogs.com/fanzhidongyzby/archive/2012/11/18/2775603.html最近刚读完《Effective C++》,相对来说,这本书的内容比较贴近基础,对于刚掌握C++基础的人会有不少的提高。不过书中还是涉及了不少C++的高级特性,阅读起来需要查阅相关的资料。书中给出了大量的示

2017-09-01 00:05:58 357

原创 父类中访问子类成员

委屈的父类一般情况下来说,父类的中的成员往往是最委屈的,子类要是有个同名(仅仅需要名字一样)成员,自己的成员就会被隐藏,子类还可以访问自己的非私有成员,但是自己想访问子类中的成员就不行,当子类与自己有同名的成员时,访问到的是自己的成员,没有同名成员时意图直接访问子类成员则直接报错.......这是何等悲惨,为此,我们应该做些什么来为父类谋得一些权利,让父类可以顺利的访问子类非费私有成员。为

2017-08-18 00:17:27 7459 1

原创 智能指针简单实现

//SmartPointer,h#ifndef _SMARTPOINTER_H_#define _SMARTPOINTER_H_namespace practice{template class unique_ptr{private: T *m_ptr;public: explicit unique_ptr(T *ptr = nullptr

2017-08-15 01:09:25 346

转载 C++重载箭头操作符的理解

作者:custa出处:http://blog.csdn.net/custa/article/details/5674434今天看《C++ Primer》的成员访问操作符。看重载箭头操作符部分,刚开始有点迷茫,看了两遍总算有点理解,把心得写在这,与各位分享,如果有错误欢迎指正。 箭头操作符(->)的通常用法是,使用一个类对象的指针来调用该指针所指对象的成员。左操作数为对象指针,右

2017-08-01 23:55:23 274

原创 装饰者模式

定义:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更灵活类型:结构型模式类图: 四大组件:1、抽象组件类Component,这个类可以是抽象类或者是接口类(建议抽象类),它为子类提供了行为的标准接口,子类根据自身情况实现自己的行为,这里将要发的继承并不是为了继承行为,而是为了使具体组件(被装饰)与装饰者的类型相互匹配,所以通过继承的方式,利用赋值兼容性

2017-07-29 00:38:23 298

原创 C++复习之const限定符

C语言中的const在C语言中const限定符是由编译器保证被修饰的变量”常量”属性,其在运行时依旧可以被改变,也就是说C语言中被const修饰的变量并不是真正意义上的常量,而是一个只读变量。 const只读变量内存的分配 和普通变量的分配规则一样,局部const只读变量的空间分配在栈上,全局const只读变量的空间分配在只读存储区(确切的说是只读静态存储区) 对C中c

2017-07-23 14:51:33 389

转载 抽象工厂模式

作者:卡奴达摩链接:http://blog.csdn.net/zhengzhb/article/details/7359385定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。类型:创建类模式类图:抽象工厂模式与工厂方法模式的区别        抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。

2017-07-21 00:08:33 255

转载 工厂方法模式

作者:卡奴达摩链接:http://blog.csdn.net/zhengzhb/article/details/7348707定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。类型:创建类模式类图:工厂方法模式代码interface IProduct { public void pr

2017-07-19 20:04:13 265

转载 策略模式

作者:卡奴达摩链接:http://blog.csdn.net/zhengzhb/article/details/7609670定义:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换。(策略模式让算法的变化独立于使用算法的客户)类型:行为类模式类图:       策略模式是对算法的封装,把一系列的算法分别封装到对应的类中,并且这些类实现相同的

2017-07-14 08:37:44 204

转载 观察者模式与推拉模型

作者卡奴达摩连接:http://blog.csdn.net/zhengzhb/article/details/7471978定义:定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。类型:行为类模式类图:        在软件系统中经常会有这样的需求:如果一个对象的状态发生改变,某些与它相

2017-07-13 00:59:42 2410

转载 23种设计模式(1):单例模式

作者:卡奴达摩连接:http://blog.csdn.net/zhengzhb/article/details/7331369定义:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。类型:创建类模式类图:类图知识点:1.类图分为三部分,依次是类名、属性、方法2.以>结尾的为注释信息3.修饰符+代表public,-

2017-07-06 20:37:18 263

转载 漫画趣解 Linux 内核构造

转自https://linux.cn/article-8290-1.html今天,我来为大家解读一幅来自 TurnOff.us 的漫画 “InSide The Linux Kernel[1]” 。 TurnOff.us[2] 是一个极客漫画网站,作者Daniel Stori 画了一些非常有趣的关于编程语言、Web、云计算、Linux 相关的漫画。今天解读的便是其中的一篇。在

2017-07-04 00:12:39 416

原创 同步并发操作

条件变量有时候线程之间是需要同步的,为了使线程同步,我们的方法有1、设置一个共享标志,一个线程持续检查共享标志,一个线程更新标志,使用一个锁来保护这个标志2、在方法一的基础上使用std::this_thread::sleep_for()让出CPU时间片,以降低不必要的时间损耗 #include //std::this_thread::sleep_for#include //s

2017-07-03 23:56:32 517

转载 C++拷贝构造、移动构造与返回值优化

转自:http://findingsea.github.io/2017/06/21/C-copy-constructor-move-constructor-and-return-value-optimization/?utm_source=tuicool&utm_medium=referral拷贝构造函数拷贝构造函数(又称复制构造函数),是用来创建已存在对象的副本。对应的还有一个概

2017-07-03 21:46:01 1757 1

原创 保护共享数据

在多线程环境中,读取操作(不管几个线程同时进行)共享数据不会影响到数据的,但是有一个线程或多个线程意图修改数据是,就需要一些机制来保证所有线程都正常工作。 C++中的互斥量C++标准库中提供了std::mutex来创建互斥量,调用其成员函数lock()可以对互斥量上锁,调用成员函数unlock()进行解锁。但是手动调用这两个成员函数会很麻烦,必须记住每次跳出执行流的时候调用unlock

2017-06-22 20:46:10 475

原创 线程管理基础

线程的启动线程在以初始函数(新线程的入口)构造std::thread对象时启动(注意:以无参构造函数构造的std::thread对象并不启动线程) 构造std::thread对象的三种方式使用普通函数构造void do_some_work();std::thread my_thread(do_some_work); 使用函数对象构造class backgro

2017-06-15 01:13:20 410

原创 C++11并发开篇

并发的概念:两个或更多独立的活动同时发生 假并发与真并发:1、任务切换(任务调度):此种方式发生在只有单核心单处理器的老式计算机上。依赖处理器较高的速度不停的在各种任务间切换,以实现”并发”(并不是真正意义上的并发,在任意时刻仅在执行一个任务)2、硬件并发: 此种方式发生在拥有多处理器或多核处理器的计算机上。依靠硬件的支持,能够实现正真意义上的同时执行多个任务 

2017-06-14 01:44:26 255

转载 设计模式六大原则

作者:卡奴达摩设计模式六大原则(1):单一职责原则链接:http://blog.csdn.net/zhengzhb/article/details/7278174定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障

2017-06-12 23:52:24 233

转载 设计模式开篇-不要滥用设计模式

作者:阿修罗一平链接:http://www.cnblogs.com/yiping06993010/archive/2006/10/18/532838.html设计模式总结-不要滥用模式从前年开始接触设计模式,一直都想深入设计模式的精髓,却都因为懒惰,再加上潜质不够(因为每次读完一个模式,都会有新的收获,而不能象金庸小说中的少侠,天资聪慧,绝世武功一遍搞定),还在继续努力着。 最开始读的

2017-06-12 21:46:48 1211

原创 常用的GUN二进制工具集

GNU BinutilsThe GNU Binutils are a collection of binary tools. The main ones are:ld - the GNU linker.as - the GNU assembler.But they also include:addr2line - Converts addresses into file

2017-06-12 00:21:42 703

转载 gcc常用命令选项

作者:Sunnylunch-blog链接:Sunnylunch-blohttp://blog.csdn.net/LF_2016/article/details/55532364gcc这条命令用来将源代码生成可执行程序,下面来看一下gcc的常用选项。 1、无选项编译链接 例:命令:gcc test.c //会默认生成a.out可执行程序 2、-E: 进行预处理

2017-06-11 19:13:28 361

转载 grep之字符串搜索算法Boyer-Moore由浅入深(比KMP快3-5倍)

作者:Alexia(minmin)链接:http://www.cnblogs.com/lanxuezaipiao/p/3452579.html这篇长文历时近两天终于完成了,前两天帮网站翻译一篇文章“为什么GNU grep如此之快?”,里面提及到grep速度快的一个重要原因是使用了Boyer-Moore算法作为字符串搜索算法,兴趣之下就想了解这个算法,发现这个算法一开始还挺难理解的,

2017-06-11 10:57:49 314

转载 内存池技术

链接:https://www.ibm.com/developerworks/cn/linux/l-cn-ppp/index6.html本章首先简单介绍自定义内存池性能优化的原理,然后列举软件开发中常用的内存池的不同类型,并给出具体实现的实例。回页首6.1 自定义内存池性能优化的原理如前所述,读者已经了解到"堆"和"栈"的区别。而在编程实践中,不可避免地要

2017-06-09 22:28:28 223

转载 USB3.0

链接:http://blog.sina.com.cn/s/blog_86f5003c0100zu4h.htmlUSB 2.0已经得到了PC厂商普遍认可,接口更成为了硬件厂商接口必备,看看家里常用的主板就清楚了。 USB2.0的最高传输速率为480Mbps,即60MB/s。不过,大家要注意这是理论传输值,如果几台设备共用一个USB通道,主控制芯片会对每台设备可支配的带宽进行分配、控制。如

2017-06-09 19:04:31 2344

转载 各种内部排序算法复杂度的比较和排序方法的选择

链接:http://blog.chinaunix.net/uid-26565142-id-3126683.html作者:printk1986选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法, 冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。冒泡法:  这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡:  复杂度为O(n*n

2017-06-08 21:39:26 437

原创 基数排序

//RadixSort.h#ifndef _RADIXSORT_H_#define _RADIXSORT_H_#include #include #include #include "List\List.h"#define SIZE 15typedef int Element;typedef Element ListType[SIZE];void CreateRan

2017-06-08 20:28:35 237

原创 归并排序

//MergeSort.h#ifndef _MERGESORT_H_#define _MERGESORT_H_#include #include #include #include #define SIZE 15typedef int Element;typedef Element ListType[SIZE];void CreateRandom(ListType L

2017-06-07 21:23:02 250

转载 USB知识

转自:http://blog.csdn.net/newnewman80/article/details/6550341USB的重要关键字:1、端点:位于USB设备或主机上的一个数据缓冲区,用来存放和发送USB的各种数据,每一个端点都有惟一的确定地址,有不同的传输特性(如输入端点、输出端点、配置端点、批量传输端点) 2、帧:时间概念,在USB中,一帧就是1

2017-06-07 18:17:26 505

空空如也

空空如也

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

TA关注的人

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