自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(96)
  • 资源 (2)
  • 问答 (2)
  • 收藏
  • 关注

原创 萃取和constexpr

最近重温了一下萃取发现其与constexpr有相似之处,记录如下。

2023-10-24 20:35:10 396

原创 完成端口IOCP

完成端口IOCP模型学习

2022-10-24 21:23:18 854 1

原创 GetLastError(包括Wininet)

GetLastError之Wininet

2022-05-09 08:07:03 600

原创 一网打尽三个工厂模式

工厂三姐妹:简单工厂模式,工厂方法模式和抽象工厂模式。

2021-12-03 17:35:25 628

原创 C++ function

C++中有几种可调用对象:函数,指针,lambda表达式,bind创建的对象以及重载了调用运算符的类。通过function类型可以将多个不同类型的对象,整合到一个类型中。Tips:基础的thread调用的时候,传入的是一个函数指针。同理可得,还可以传入一个用户定义的函数对象,传入一个类的内部函数,传入一个命名完成的lambda表达式或者传入一个未命名的lambda表达式。一、背景使用多种类型的可调用对象构建一个计算器1.普通函数int add(int a,int b){.

2021-10-24 05:30:00 14117 2

原创 Metabase字段筛选条件

1.字段过滤器无法处理表别名。由于字段过滤器依赖于有关表中列(以及这些表的特定名称)的元数据,因此过滤器无法“知道”为表添加的别名。根据所使用的数据库,可能需要在FROM子句中包含完整的模式路径。2.字段筛选条件类型的变量使用特殊的语法,只需要向WHERE子句添加提供字段过滤器。如下例所示:表格orders中,和表格product。ordersorder_id,date,product_idproductsname,id,source,category想要通过product_

2021-08-25 15:34:37 2345 2

原创 I/O复用之epoll

简而言之,epoll通过维护一个红黑树和一个双端链表来解决了select和poll的缺点。能够完成大批量连接的高并发,O(1)的速度响应已就绪连接。函数声明epoll_create//创建epoll对象int epoll_create(int size); 创建一个event_poll对象的句柄,size用来告诉内核这个监听的数目一共有多大,这个参数不同于select()中的第一个参数,给出最大监听的fd+1的值,参数size并不是限制了epoll所能监听的描述符最大个数,只是对

2021-08-06 09:02:31 147

原创 I/O复用之Select

select主要通过维护一个套接字队列,来完成单线程的IO复用,利用以下几个函数实现NAME select, pselect, FD_CLR, FD_ISSET, FD_SET, FD_ZERO - synchronous I/O multiplexing函数声明SYNOPSIS /* According to POSIX.1-2001 */ #include <sys/select.h> /* Accor

2021-08-05 11:15:08 170

原创 I/O模型与I/O复用

在一次IO操作中,数据不会直接拷贝到程序的内存缓冲区,而是分为以下两个阶段:等待数据准备好,然后复制到内核缓冲区 从内核缓冲区复制到应用程序缓冲区IO模型IO模型主要有五种阻塞式I/O当数据未准备好时,进程会一直阻塞,直到数据准备好并从内核态复制到用户态。非阻塞式I/O若数据未准备好,则会返回,可以执行其他任务;过段时间再次询问;若准备好则从内核态复制到用户态。这种非阻塞式循环请求的方式称为轮询。I/O复用(select,poll,epoll等)利用内核来监视文件描.

2021-08-04 08:40:59 127

原创 MFC双缓冲绘图

双缓冲绘图的核心是将所有绘图操作的屏幕设备CDC pDC 用自定义的内存设备CDC MemDC来代替,然后通过在内存的位图CBitmap中作图,然后将作好的图复制到屏幕MemDC来显示,同时禁止背景刷新,从而消除闪烁。一、原因窗体在响应WM_PAINT消息的时候要进行复杂的图形处理,那么窗体在重绘时由于过频的刷新而引起闪烁现象。因为窗体在刷新时会有一个擦除原来图象的过程OnEraseBkgnd,它利用背景色填充窗体绘图区,然后在调用新的绘图代码进行重绘,这样一擦一写造成了图象颜色的反差。当WM_PA

2021-07-28 11:01:17 2288

原创 error C2248: “CObject::CObject”: 无法访问 private 成员(在“CObject”类中声明)

原因首先说明原因,这是由于对CObject对象进行直接拷贝导致的,在MFC中,大部分对象都是继承自​​CObject。然而,​​CObject对象没有实现拷贝构造函数和拷贝赋值运算符,如下图所示。如下例所示:CStatic m_static1;m_static1.Create(NULL,NULL,_T("文本"),WS_VISIBLE,CRect(0,0,100,100),this,IDC_M_STATIC1);vector<CStatic> v_static;v_s..

2021-07-14 17:02:19 2842 1

原创 MFC代码添加控件并设定格式

在MainFrm中添加在View中添加通过ShowWindow(SW_SHONORMAL) 这里的SW 表示是ShowWindow的命令或者在创建的时候设置Style为WS_VISIBLE, 这里的WS表示为Window Style

2021-07-13 08:21:02 2453 1

原创 求二叉树中节点的最大距离

#include"BinaryTree.h"#include<algorithm>using std::max;struct Node{ int value; Node* left; Node* right; Node(int i) { value = i; left = nullptr; right = nullptr; }};int funCore(Node* root, int& res) { int l = 0, r = 0; if (roo.

2020-08-29 10:02:53 399

原创 手写智能指针

template<typename T>class shared_ptr_my{public: shared_ptr_my(T* p=nullptr); shared_ptr_my(shared_ptr_my&); shared_ptr_my& operator=(shared_ptr_my&); shared_ptr_my(shared_ptr_my&&) noexcept; shared_ptr_my.

2020-08-28 16:38:32 236

原创 状态模式以及头文件相互包含

状态模式头文件互相包含问题在自己写状态模式的过程中,发现出现类名未声明的情况,百思不得其解,不断调试未果。灵光乍现,怀疑是头文件互相包含导致的问题,遂查资料找到问题并解决。不可避免的存在头文件互相包含的情况。参考资料https://blog.csdn.net/hazir/article/details/38600419...

2020-06-23 22:46:33 278

原创 STL源码剖析allocator

查找C++primer中的allocate

2020-06-13 16:56:29 487

原创 STL源码剖析iterators与traits

迭代器最重要的编程工作是对operator*和operator->进行重载。

2020-06-13 16:55:53 218

原创 前缀树C++实现

1 什么是Trie树 Trie树,即前缀树,又称单词查找树,字典树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。  Trie树的核心思想是空间换时间,利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。 它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。它有3...

2020-05-05 11:47:19 1094 1

原创 STL源码剖析hashtable

在使用hashtable的时候,不能直接调用<stl_hashtable.h>,应该含乳有用到hashtable的容器头文件,例如:<hash_set.h>和<hash_map.h>。#include<hash_set>#include<hash_map>hash function只能处理int,short,long,char...

2020-05-03 09:47:03 326

原创 STL源码剖析RB-tree

一、红黑树概述 红黑树和我们以前学过的AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。不过自从红黑树出来后,AVL树就被放到了博物馆里,据说是红黑树有更好的效率,更高的统计性能。这一点在我们了解了红黑树的实现原理后,就会有更加深切的体会。 红黑树和AVL树的区别在于它使用颜色来标识结点的高度,它所追求的是局部平衡而不是AVL树...

2020-05-03 09:45:41 272

原创 C++运算符重载

一、++i和i++对于前置与后置版本使用同样的符号,运算对象的数量和类型也相同,为了解决这个问题,后置版本接受一个额外的(不被使用的)int类型形参。这个形参唯一的作用就是区分前置版本和后置版本。当我们使用后置运算符的时候,编译器会为这个形参提供一个值为0的实参。尽管藏语法上来说后置函数可以使用功能这个额外的形参,但是实际过程中通常不使用。template<class ...

2020-04-28 16:21:17 223

转载 C++中typename关键字的使用方法和注意事项

目录起因 typename的常见用法 typename的来源 一些关键概念 限定名和非限定名 依赖名和非依赖名 类作用域 引入typename的真实原因 一个例子 问题浮现 千呼万唤始出来 不同编译器对错误情况的处理 使用typename的规则 其它例子 再看常见用法 参考 写在结尾起因近日,看到这样一行代码:typedef ...

2020-04-18 16:22:31 633

原创 C++ explicit和implicit

一、类类型转换首先,明确什么是类类型转换,内置类型存在定义了几种自动转换的规则,同样地,类也有定义隐式的转换规则。若构造函数没有声明explicit且只接受一个实参,则它可以进行隐式的类类型转换。(如何将一种类类型转换为另一种类类型的转换规则)类的构造函数默认是implicit的,可以进行隐式类类型转换的,explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是...

2020-04-17 22:31:55 527

原创 C++的内存分布以及static的使用

详见:https://blog.csdn.net/chenyijun/article/details/81938287static的使用主要为两部分:不涉及类的static和涉及类的staticC/C++的内存分布1.栈区: 由编译器自动分配释放,像局部变量,函数参数,都是在栈区。会随着作用于退出而释放空间。2.堆区:程序员分配并释放的区域,像malloc(c),new(c++...

2020-04-10 18:08:39 1360

原创 C++分割字符串

利用C++中的strtok函数来将string使用指定字符串分割。strtok函数头文件:#include <cstring>函数原型:char * strtok (char *str, const char * delimiters);参数:str:待分割的字符串(c-string);delimiters:分割符字符串。该函数用来将字符串分割成一个个片段。参数s...

2020-03-30 12:26:05 9698 5

原创 Ubuntu JetBrains(JetBrains Account Error:JetBrains Account connection error: www.jetbrains.com)

问题:Your host may be behind a proxy.在使用学生免费账户登录的时候出现错误解决:修改/etc/hosts文件,将其中的 jetbrains的相关行去掉即可。

2020-03-23 17:59:30 506

原创 C++sort函数

很多算法都会比较输入序列中的元素。默认情况下,这类算法使用元素类型的<或者==运算符来完成比较。标准库还为这些算法定义了额外的版本,允许我们提供自己定义的的操作来代替默认运算符。以sort函数为例,默认使用<来进行比较,元素按照从小到大排序。sort函数的第二个版本接受第三个参数,此参数是一个谓词。谓词谓词是一个可调用表达式,其返回结果是一个能用作条件的值。标...

2020-03-09 16:12:03 409

原创 Ubuntu开机后五个点(gcc离线安装)

0.首先说明一下背景,昨天电脑死机后,强制关机,导致开机后只有五个点循环闪烁,进不去桌面。所以强制关机还是尽量避免吧。1.在五个点的界面,不能通过ctrl+alt+f1来进入tty1界面。但是grub界面还是没有问题的,选择Ubuntu高级选项。选择recovery mode(恢复模式)进入,有一下几个选项:resume Resume normal boot 继续以正常模式启...

2020-02-26 17:50:40 2557 1

原创 CMake Error at cmake/OpenCVModule.cmake:288 (message):

在Opencv编译的时候出现的问题,CMake Error at cmake/OpenCVModule.cmake:288 (message):No modules has been found:后来发现是扩展库的路径写错了正确的应该是contrib中的modules中的路径,...

2020-02-24 17:15:23 2884

原创 Ubuntu两种不同版本的Opencv共存

最近对Opencv中的contrib环境进行了重新编译,但是是不同版本的,以后可以使用不同版本。假设你已经安装了一个版本的Opencv,现在让另一个版本共存1.下载一个新版本的Opencv。2.创建build文件夹。sudo mkdir my_buildcd my_build这里需要注意你的build是创建在哪里,根目录下还是在解压后的Opencv文件下。3.使用cma...

2020-02-24 10:36:37 690

原创 opencv3.4.3/opencv-3.4.3/opencv_contrib-3.4.3/modules/xfeatures2d/src/vgg.cpp:490:41: fatal error: v

首先,说明问题在configure之后,进行generate,再make发现出现该问题。我们通过看下面的报错信息。发现最下方Makefile:160:recipe for target ‘all’ failed。我们打开Makefile在160行看到这就是执行make之后调用的文件,再看上面的报错信息,我们查看CMakeFiles/Makefile2:3073行...

2020-02-20 19:25:28 1770 6

原创 认识系统服务(daemon)

对于不同Linux发行版本,与systemd的daemon运行过程相关的目录路径可能会不一样对于centos7:/usr/lib/systemd/system/: 使用 CentOS 官方提供的软件安装后,默认的启动脚本配置文件都放在这里,这里的数据尽量不要修改~ 要修改时,请到 /etc/systemd/system 底下修改较佳!/run/systemd/system/: 系...

2020-02-05 17:55:07 4262

原创 进程管理

一.什么是进程(process)1)进程与程序触发任何一个事件时,系统都会将它定义为一个进程,并且给这个进程一个ID,称为PID。程序:一般是放置在物理磁盘或其他存储媒介中(以物理文件的形式存在),然后通过用户的执行来触发。触发后加载到内存中成为一个个体,就是进程。(内存中的数据都是写入到/proc/*这个目录下)进程:程序被触发后,执行者的权限与属性、程序的代码与所需数据等都会被...

2020-01-30 11:13:18 370 1

原创 计划任务

计划任务分为两种:1.突发性的任务,只执行一次,使用at2.例行性的任务,循环执行,使用crontab一、at需要atd服务的支持。sudo apt install at//Ubuntu需要安装atd服务systemctl restart atd 重新启动atd服务systemctl enable atd 开机自启动atdsystemctl status atd ...

2020-01-22 14:50:18 418

原创 Shell script

什么是Shell script?shell script 是利用shell的功能所写的一个程序,是纯文本文件,将一些shell的语法与指令(含外部指令)写在里面,搭配正则表达式、grep管道命令和数据流重定向等功能,以达到我们想要的目的。shell script是系统管理上的很好的工具,但是不适合用在大量数值的运算。因为shell scripts的速度较慢,且使用的CPU的资源较多,容易造...

2020-01-14 14:38:15 449

原创 Linux下sh与bash的区别

在学习shell脚本的过程中发现一个问题,使用./与sh 执行脚本的结果不同,如下:#!/bin/bash read -p "please input: " tmp echo ${tmp}[ "${tmp}" == "Y" ] || [ "${t...

2020-01-10 11:46:58 3135 2

原创 数据流重定向

数据流重定向简单地说,数据流重定向就是将某个命令执行后应该出现在屏幕上的数据,传输到其他的地方。standard output与standard error outputstandard output指的是命令执行所返回的正确信息,standard error output指的是命令执行失败所返回的错误信息。标准输入stdin:代码为0,使用<或者<<标准...

2020-01-08 11:40:44 410

原创 Linux文件系统的压缩

Linux常见的压缩命令gzipgzip是为了替换compress并提供更换的压缩比而成立的,gzip可以解开compress、zip与gzip压缩的文件,压缩后文件后缀为*.gz-c:将压缩的数据输出到屏幕上,可通过数据流重定向来处理-d:解压缩的参数-v:可以在压缩后显示出原文件与压缩文件的压缩比等信息不能保留原始文件,可以使用-c来完成这个功能,gzip -c fil...

2020-01-07 19:34:55 319

原创 Linux的正则表达式

正则表达式(Regular Expression)以行为单位来进行字符串的处理操作。主要分为:基础正则表达式和扩展正则表达式基础正则表达式语系对正则表达式的影响LANG=C时,01234…ABCD … Zabcd…zLANG=zh_CN时,01234…aAbBcCdD…zZ下面都是以LANG=C来记忆。基础正则表达式字符的集合sed工具操作说明:[n1,[n2]] functi...

2020-01-07 10:38:29 295

原创 C++erase()

偶然发现了当vecotr在erase最后一个iter之后,仍然可以++代表一个值,而不为空。vector<int> nums={3,2,3,4};int val=3;auto iter=nums.begin();while(*iter){ if(*iter==val) nums.erase(iter); else iter++...

2019-12-30 14:23:18 2516

My Game.7z

自己开发的Unity3D汽车驾驶3D小游戏,包含了Unity3D构建一个完整游戏基础的功能。丰富的背景音乐,包含有多个关卡,环境和赛道都有变化。下载即可用可玩。

2019-08-07

tensorflow-master.tmp

C++版本的Tensorflow,使用bazel编译使用,在Github上下载比较慢。

2019-06-26

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

TA关注的人

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