2 koko_TT

尚未进行身份认证

我要认证

Show me the code.

等级
TA的排名 4w+

Sedgewick增量希尔排序和快速排序 (附C++代码)

01 运行时间比对结果随机数组长度为10000时:快速排序:1452希尔排序:2122随机数组长度为100000时:快速排序:19156希尔排序:2980602 Show me the code// Sedgewick增量希尔排序template <class T>void heelSort(T origin[], const long SIZE){ ...

2020-03-01 17:51:04

opencv与openmv?

01 对opencv的认知有图像处理的项目用matlab来仿真做的话,体验不是很友好,尽管matlab在数据可视化方面做的无可匹敌。但是图像处理中,经常会要调用各种滤波,分割,二值化的函数,在这一点上matlab并未提供比较全面的库函数可以调用,opencv则封装了丰富的图像处理函数,使用其做算法的仿真非常得心应手。02 opencv的不足(个人观点)使用C++配合opencv来做图像算法的...

2019-09-12 14:40:35

C++多线程单例模式

01 原理单例模式即是私有化构造函数,创建时通过类中静态函数获得单一实例的一种特殊类。在多线程下需要加上互斥锁,保证单例模式的创建和析构是原子性的。由于单例模式的特殊性,这里不讨论其析构函数,个人在具体使用的环境中不需要析构单例模式的实例。02 结果创建十个线程来测试。singleton bornPID:: 0x70000c545000 ------ instance address ...

2019-09-05 11:47:01

C++ 堆排序

01 思路以从小到大排列为例。代码用到以下几个模块swap模块完成一个数组中的两个位置的元素交换heapify模块完成将一个子树构建为根节点最大的形式。如果根节点不是最大值,那么交换后将对传入最大位置的序号进行递归。build_heap模块从倒数第二层开始反向依次调用heepify模块,直到0节点。sort模块首先调用build_heap建堆,再从最后一...

2019-08-20 16:31:22

C++ 生产者消费者模式的简单实现

01 模式简介生产者消费者模式可以理解为在生产者和消费者之间添加一个缓冲区,生产者只负责向缓冲区添加元素,而消费者只负责从缓冲区提取元素并使用。这么做可以对生产者与消费者进行解耦,这样一来消费者不直接调用生产者,使得生产者的不会因为生产者的具体处理而阻塞,充分利用资源。02 思路介绍代码中的具体元素为Stone类,生产者线程负责向缓冲类Busket中添加具体元素,而消费者线程则在缓冲类中的...

2019-08-20 11:47:03

C++中 atomic和mutex的效率

01 引由于“哪怕是对一个bool型变量的赋值和读取都不保证原子性“,所以在并发环境下,操作可能产生Data Race的变量需要认为的加以保护。常用的措施用互斥量mutex的包裹的临界区。利用atomic方式,赋予其原子性。那么这两种措施效率如何呢?02 比对结果mutex互斥量time: 1.76376e+065000000atomic形式time: 3082...

2019-08-16 10:29:37

Linux共享内存 封装

01 Show me the code#include <sys/shm.h>#include <unistd.h>#include <stdio.h>#include <assert.h>#include <stdlib.h>#include <sys/types.h>#include <sys/ipc....

2019-07-25 15:20:25

Linux进程间互斥锁 (共享内存实现)

01 原理开辟一块共享内存,使得相关进程均可访问同一块区域,再将互斥锁定义在该区域(即共享内存)上,使得相关进程可以使用该锁。02 进程间的互斥锁和线程间互斥锁的区别函数pthread_mutex_init(互斥锁地址, 属性对象地址)在定义一把线程锁的时候第二个参数通常传为NULL,这样该锁默认只能被统一进程下的线程持有。如果要将其定义为进程之间可以持有的互斥锁,则需要传入属性对象地址。...

2019-07-24 22:58:44

LINUX进程变量隔离 虚拟地址

01 虚拟地址Linux系统中,fork()函数创建的子进程,会忠实的将父进程的内存内容进行拷贝,尽管在fork()函数之前定义的变量在各自进程块中的虚拟地址相同,但是不同进程对其的操作是相互隔离的,而不管是fork()之前的全局变量、静态变量还是局部变量,都是如此。如果想使得两个进程操作同一块物理地址,可以使用共享内存的方式,也可以用内存映射(MMP)的方式。02 Show me the ...

2019-07-24 22:33:57

Linux内核驱动“Hello World”

01 驱动组成的三大部分一个内核驱动主要分为三大部分:module_init()——入口编写初始化函数并将函数名传入入口函数初始化函数的格式为int __init func_name(void)即返回值为int型,参数类型为void,函数名前的__init表示将其加载到init段。module_exit()——出口编写驱动销毁函数并将函数名传入出口函数,释放资源。...

2019-07-19 21:09:56

Linux线程池的原理及实现

01 为什么需要线程池首要明白两个地方:线程的创建需要内存资源线程的创建和销毁需要时间资源显而易见,由于以上两个原因,不得不寻找一个折衷的方式面对多任务的问题。如果我们只创建一定量的线程,且在一个线程执行完某一任务后,重复利用该线程去处理新的任务而不是直接销毁它,那么通过这两个策略我们就可以“朴素”的解决以上两个问题。线程池的初衷就是想搭建一个有一定数量线程,且可以重复利用这些线程处...

2019-07-18 15:30:14

C++桥模式

01 桥模式的用途若一个类具有两种属性:属性A和属性B。其中A属性有三种B属性有四种。那么实际需要编写的类的个数为3*4 = 12如果我们把具体的类抽象成一种需要装载两种属性的模具,那么需要编写的代码就大大减少。02 构建方法以两种属性为例构建属性A的抽象基类为不同的属性A构建不同的具体类作为基类的派生类,重写基类的方法。构建属性B的抽象类为不同的属性B构建不同的具体类作为基类的派...

2019-06-24 16:48:56

C++代理模式

01 使用场景不想让一个类暴露,去填充一个接口需求,这时就构建一个代理类,他封装被代理对象完成实际的调用需要。02 构建方法构建一个只含纯虚方法的基类,被代理类和代理类都是该基类的派生类。被代理类重写基类的方法。代理类内含一个基类类型的指针,实际后续指向堆上的被代理类实例。构造函数接受一个基类类型的指针,实际指向堆上的被代理类实例,并用该指针初始化自身内含的基类指针。重写基类的...

2019-06-24 16:47:52

C++工厂模式

01 工厂模式解决了什么问题在实际的项目中,如果只是借助关键字new来创建类的实例,在类的种类越来越多的情况下,很难准确的记住他们的名字,这时候可以将相关类的创建封装在一种"工厂类"中。当要创建相关的类的实例的时候,就借助"工厂实例"中的成员函数完成实例的创建。02 工厂模式的种类简单工厂模式这种模式不利于后期更多"产品类的加入",因为在简单工厂模式下,只存在一个工厂类,而得到不同的产...

2019-06-22 22:21:39

C++观察者模式

01 观察者模式做了什么存在过程如下——被观察者更新信息,观察者从被观察者处获取更新的信息,现在我们想省去第二步,即如果观察者订阅了被观察者,那么当被观察者更新信息的时候,被观察者可以自动获取更新。考虑一个具体的模型。对于老师和学生来说,老师是被观察者,学生是观察者,当老师更新一个消息的时候我们想使得订阅该老师的学生能够自动的获取老师本次更新的信息。在代码中借助观察者模式来完成这个操作。0...

2019-06-21 16:50:34

C++适配器模式

01 用途两个接口不匹配的类想要交互,直接改接口太繁琐(大工程就体现出来了),就添加第三类(适配器类)来协调两者的关系。形象理解,假设现在有两个忍者——年轻的忍者和年老的忍者,其中年轻的攻击漏洞百出,而年老的则成熟稳健,现在年轻的忍者需要参加考试,所以想打出老年忍者成熟稳健的拳法,适配器就完成了这个转换过程,即用老年忍者来“训练”年轻的忍者。02 分类及实现方法适配器模式分为两类对象适...

2019-06-21 11:40:53

C++默认构造函数、拷贝构造函数、拷贝赋值函数

注意前两者会在创建一个类实例的时候被调用,而最后的拷贝赋值函数是对一个已经创建的实力进行=调用的时候被调用。拷贝赋值函数的返回值应该为该类的一个引用,否则无法使用classA = classB = classC。Show me the code#include <iostream>using namespace std;class Base {public:...

2019-05-30 20:28:11

C++生成均匀分布随机数(附C++代码)

生成均匀分布随机数的准备准备随机数生成引擎,这里用到默认引擎——defalut_random_engin my_engine_name创建均匀分布随机数生成器实例——uniform_int_distribution my_object_name(LOW, HIGH)(两边均为闭区间)传入引擎利用生成器生成随机数——object_name(my_engin_name)Show me th...

2019-05-23 11:50:21

C++多线程异步并行——async、future(附C++代码)

先上代码体会#include <iostream>#include <future>#include <chrono>using namespace std;// 定义一个会返回5的函数int fun(char c) { // 循环输出字符 for (int i = 0; i < 20; ++i) { ...

2019-05-21 22:10:01

Mysql 成长之路(六)%与_通配符及使用建议

两种通配符的使用原表mysql> select * from simple_account;+----+-----------+-------+-----+---------+| id | name | sex | age | money |+----+-----------+-------+-----+---------+| 1 | Tom | ...

2019-05-06 11:03:13

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 阅读者勋章Lv1
    阅读者勋章Lv1
    授予在CSDN APP累计阅读博文达到3天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。