自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Ccache 源码阅读(1)--编译

Ccache – a fast compiler cachegithubwebhomeCcache(或“Ccache”)是编译器缓存。它通过缓存以前的编译并检测何时再次执行相同的编译来加速重新编译。编译git clone https://github.com/ccache/ccache ccachecd ccachegit checkout -b v4.0 v4.0mkdir buildcd buildcmake ..make初探入口...

2021-01-09 23:40:32 261

原创 跳跃表SkipList(简单的C++实现)

跳跃表C++实现

2023-07-19 16:25:34 665

原创 C++11 关键字 thread_local

thread_local 线程本地变量需要在可访问的作用域中声明声明时可以初始化,但只有在线程中被使用时才实例化,随线程销毁时销毁#include <iostream>#include <thread>#include <mutex>#include <string>#include <string_view>class Cls_A{ int data;public: Cls_A(const int x):

2022-04-25 08:41:51 1265

原创 算法 - 数论 - powmod 快速幂取模

理论定理1:(a+b)mod  c=(amod  c+bmod  c)mod  c(a + b) \mod c = (a \mod c + b \mod c) \mod c(a+b)modc=(amodc+bmodc)modc证明:设a=xc+x0,b=yc+y0a = xc + x_0, b = yc + y_0a=xc+x0​,b=yc+y0​则(a+b)÷c=(xc+x0+yc+y0)÷c(a + b) \div c = (xc + x_0 + yc + y_0) \div c(a+b)÷

2022-04-18 16:11:00 1246

原创 算法 - 数论 - 最大公约数

aaa与bbb同为整数,aaa是bbb的约数记作a∣ba|ba∣b,有一整数ddd,满足d∣a;d∣bd|a;d|bd∣a;d∣b则ddd为a,ba,ba,b的公约数,现在约定a,ba,ba,b的最大公约数记作gcd(a,b)gcd(a,b)gcd(a,b).定理: gcd(a,b)=gcd(r,a);a≠0,r=bmod  agcd(a,b) = gcd(r,a); a \neq 0 , r = b \mod agcd(a,b)=gcd(r,a);a​=0,r=bmoda证明:设 d=gcd(a

2022-04-18 09:07:07 169

原创 算法 - 日期处理

简述定义星期的枚举namesapce dttm {enum week_t{ Sunday = 7 % 7, Monday = 1 % 7, Tuesday = 2 % 7, Wednesday = 3 % 7, Thursday = 4 % 7, Friday = 5 % 7, Saturday = 6 % 7};}计算其他日子的星期知道今天是星期yyy,知道一个日子距离今天xxx天,那天是星期zzz如果是今天之后的日子 z=(

2022-04-16 15:42:51 419

原创 计算几何专栏目录

计算几何(初) – 计算几何误差修正计算几何(初) – 二维点类

2022-03-26 16:45:58 196

原创 计算几何(初) -- 二维点类

设计一个二维点类,进行二维运算/**comp_geometry.hpp**/#include <cmath>/* interface */namespace cgeo{inline namespace interface{#define interface structtemplate<typename T>interface weightable{ virtual T _w(const int idx) const = 0;};temp

2022-03-26 16:12:10 252

原创 计算几何(初) -- 计算几何误差修正

给定一个浮点数的,判断它的符号#include <cmath>inline constexpr int sign(const double x,const double eps = 1e-8) { if (std::abs(x) < eps) return 0; if (x > 0.0) return 1; return -1;}

2022-03-26 14:45:57 405

原创 C++ 手动调用虚函数

#include <iostream>class Base{public: virtual void show() { std::cout <<"Base show" << std::endl; }};class Sub : public Base{public: void show() override { std::cout <<"Sub show" <<

2022-03-19 11:37:39 605

原创 C++虚函数指针的初始化时间

看下面这个例子#include <iostream>class Base {public: virtual void vshow() {std::cout << "base vshow" << std::endl;} void show() {this->vshow();}};class Sub : public Base {public: void vshow() override {std::cout << "sub vshow"

2022-03-07 17:03:23 1398 1

原创 红黑树删除

文章目录简介删除1 叶子2 独子简介https://blog.csdn.net/weixin_43868793/article/details/123114745删除1 叶子如果欲删除的结点是一个叶子结点,即结点没有孩子,直接删除即可2 独子如果欲删除的结点只有一个子结点,那么子结点的值直接覆盖上来,再...

2022-03-01 11:15:28 301

原创 大端存储与小端存储

判断利用union判断#include <iostream>#include <cinttypes>bool IsBigEndian(){ union { uint8_t a; uint16_t b; } u; u.b = 0xff00; return u.a == 0xff;}int main(){ if(IsBigEndian()) { std::cout <<

2022-02-25 10:16:32 193

原创 红黑树插入

文章目录简介插入1 根位置2 黑父3 红父红叔4 红父黑叔,左左5 红父黑叔,左右简介插入1 根位置如果树中没有元素,插入位置是根,直接插入,颜色置黑.如插入12#mermaid-svg-259EljtZfJkoMseD {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-259EljtZfJkoMseD .error-icon{fill:#552222;}#mer

2022-02-24 18:39:00 235

原创 红黑树详解

文章目录简介性质基本操作左旋 与 右旋向上反色插入删除源码简介性质非黑即红,父红子黑,黑叶,黑根,等黑高每个节点或者是黑色,或者是红色。(非黑即红)如果一个节点是红色的,则它的子节点必须是黑色的。(父红子黑)每个叶子节点是黑色。 [注意:这里叶子节点,是指为空的叶子节点!] (黑叶)根节点是黑色。(黑根)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。(等黑高)基本操作左旋 与 右旋#mermaid-svg-jhko4H6SGYne7DUJ {font-famil

2022-02-24 18:37:44 240

原创 C++右值引用

文章目录左值与右值将亡值与移动语义引用折叠与完美转发左值与右值C++中所有的值都必然属于左值、右值二者之一。左值是指表达式结束后依然存在的持久化对象,右值是指表达式结束时就不再存在的临时对象。C++11之前区分左值和右值的便捷方法:看能不能对表达式取地址,如果能,则为左值,否则为右值。先来看看一个例子:/* tt.hpp */#pragma once#include <iostream>class Cls{ int x;public: Cls():x{100}

2022-02-21 19:22:16 490

原创 GoF设计模式-Singleton(单例)

局部静态变量在C++11后,这种方式简单易用,线程安全class Singleton{ Singleton()=default; Singleton(Singleton&) = delete; Singleton(Singleton&&) = delete; Singleton& operator=(Singleton&) = delete; Singleton& operator=(Singleton&&

2022-02-18 11:24:01 302

原创 GoF设计模式(三)-创建型模式

Factory 工厂https://editor.csdn.net/md/?articleId=122925327Prototype 原型https://editor.csdn.net/md/?articleId=122928024Singleton 单例Builder 建造者

2022-02-18 10:33:59 193

原创 GoF设计模式-Builder(创造者)

简介定义将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。类图#mermaid-svg-wX1sl6X2NEnnDT77 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-wX1sl6X2NEnnDT77 .label text{fill:#333}#mermaid-svg-wX1sl

2022-02-18 10:31:48 755

原创 GoF设计模式-Flyweight(享元结构)

简介定义Flyweight是指:避免大量拥有相同内容的小类实例的开销,使用大家共享一个类实例。例子对象缓存enum class IccFileType:uint8_t { SIM,ISIM,RUIM};class IccFile {};class SimFile:public IccFile {};class IsimFile:public IccFile {};class RuimFile:public IccFile {};class IccFilePool{

2022-02-17 19:45:16 192

原创 GoF设计模式(二)-行为型模式简介

文章目录复用决策与扩展决策的行为由具体子类决定Template 模板行为由其他类的对象决定Strategy 策略(库)行为State 状态(机)行为由具体子类决定与其他类的对象决定Visitor 访问者行为用于遍历对象集合行为Iterator 迭代器行为Visitor 访问者行为用于解耦的行为降低多个对象和类之间的通信复杂性Mediator 中介行为请求者与实现者解耦Command 命令化(指令化)Chain of Responsibility 责任链Interpreter 解释器降低一对多的复杂度Obse

2022-02-17 17:36:27 245

原创 加了一行日志后程序不崩溃了

工作中有遇到此类奇怪的问题,想通过加日志来看发生了什么,然后就是“量子力学"了。后来明白,是因为野指针.现在简单复现下当时的情况#include <iostream>struct puda { int p1; char* pin2;};void f(void* arg){ if(!arg) return; puda* p = (puda*)arg; //std::cout << std::showpoint <<&a

2022-02-17 16:10:12 323

原创 GoF设计模式(一)-结构型模式简介

文章目录一对多型缓存有相同父类对象Flyweight 享元结构组合有相同父类对象Composite 组合结构整合不同类对象Facade 外观结构一对一型不同接口之间Adapter 适配器结构Bridge 桥结构相同接口之间针对某些方法Decorator 装饰器结构针对对象Proxy 代理结构一对多型缓存有相同父类对象Flyweight 享元结构组合有相同父类对象Composite 组合结构整合不同类对象Facade 外观结构一对一型不同接口之间Adapter 适配器结构Bridge 桥

2022-02-17 14:39:41 550

原创 C++重载

1void f(){}void f(int x){}void f(float x){}void f(int x,bool y){}2void f(const int& x){}void f(int&& x){}int main(){ const int x = 0; int y = 0; f(x); f(y); f(0); f(std::move(x));}3#include <iostream&gt

2022-02-15 19:49:58 260

原创 C/C++ 协程的实现

https://github.com/cloudwu/coroutinehttps://zhengyinyong.com/post/ucontext-usage-and-coroutine/https://www.zhihu.com/column/p/31176003https://www.jianshu.com/p/a96b31da3ab0

2022-02-15 16:54:00 597

原创 GoF设计模式-Prototype(原型构造器)

简介定义Prototype是指:用原型实例指定创建对像的种类,并且通过copy这些原型创建新的对象。Flyweight是指:避免大量拥有相同内容的小类的开销,使用大家共享一个类。class InnerEvent{public: using Point = std::unique_ptr<InnerEvent,std::function<void(InnerEvent*)>>;};class EventPool{ mutable std:

2022-02-15 11:20:17 479

原创 GoF设计模式-Factory(工厂方法构造器)

简介应该像使用new一样频繁的使用工厂方法定义: 提供创建对象的接口。为何使用工厂方法类的构造函数不宜过长当实例化的初始化过程不是像成员初始化那样简单时,可能是一段很长且复杂的过程时,写在构造函数中是不合适的,需要跟据封装、委托的思想使用Init函数或工厂方法进行Refactor。子类过多时,减少维护实例化子类的负担一个工程项目在开发过程中是动态的,很少有代码能一步到位,完美实现,不再更改迭代的。一个简单的例子:class TelCard{};class EsimCard:pub

2022-02-14 16:45:20 216

原创 c++模板排序

使用用C++模板实现归并排序先实现iseq class template// seq.hpp#pragma once#include <iostream>#include <utility>template<int...xs>struct iseq {};template<int...xs>void print_seq(const iseq<xs...>& v){ constexpr int sz = sizeof.

2021-08-09 14:23:46 165

原创 windows下c++使用sqlite

使用git仓库https://github.com/sqlite/sqlitegit clone https://github.com/sqlite/sqlite sqlite/sqlitecd sqlite\sqlitegit checkout version-3.10.0 -b version-3.10.0构建sqlite3需要Tcl85,ActiveTcl下载ActiveTcl 8.5,安装完之后就用MSVC进行编译,我使用的是vs2015# cmd下的命令cd sqlite\s

2021-06-01 10:14:40 480

原创 程序默认栈空间大小

linuxlinux 下线程的默认栈大小是8M$ ulimit -s 8192 # 8 * 1024KB查看单个进程暂用堆栈的信息$ strace -f -p {PID}临时改变栈空间的大小ulimit -s 102400 # 改为100MBulimit -s ulimited # 不限制 永久修改栈空间大大小echo -ne "* soft stack 102400" >>/etc/security/limits.conf或者$ sudo echo '

2021-05-27 14:34:02 2815 2

原创 C++符号还原

C++ name mangling由于C++ 有命名空间,函数重载等特性,在原码被编译后会对函数进行重命名cxxabic++应用程序二进制接口// name_demangling.cc#include <cassert>#include <cstring>#include <cxxabi.h>#include <iostream>int main(int argc, char *argv[]) { assert(argc > 1

2021-05-18 13:52:26 407

原创 systemtap初棎

官网 https://sourceware.org/systemtap/教程 https://sourceware.org/systemtap/tutorial.pdf安装# centosyum install systemtapstap --version第一个程序#!/usr/bin/stap### hello.stp ###probe begin { log("hello stap") exit()}stap ./hello.stp一个socket监控例子#!.

2021-05-17 17:14:27 279

原创 linux上动态追踪技术:bcc

参考动态追踪技术漫谈BCC – 用于Linux性能监视,网络和更多的动态跟踪工具动态追踪技术漫谈《性能之巅》学习笔记之Dtrace安装# 在centos上yum install bcc.x86_64tools 目录ls /usr/share/bcc/toolsargdist compactsnoop ext4dist javaobjnew nodegc profile runqslower tclobjnew t

2021-05-17 14:40:07 299

原创 linux定时任务crontab

安装yum install crontabsorapt-get install crontabs语法* * * * * ${shell command} # shell命令- - - - -| | | | || | | | +----- 星期中星期几 (0 - 6) (星期天 为0)| | | +---------- 月份 (1 - 12) | | .

2021-05-15 16:34:15 69

原创 shell 字符串处理:截取

${var#word} 删除前缀,最小匹配前缀${var##word} 删除前缀,最大匹配前缀${var%word} 删除后缀,最小匹配后缀${var%%word} 删除后缀,最大匹配后缀例子for i in `ls /public/src/*.so*`;do ln -sf $i /usr/lib/${i##*/} ;done...

2021-05-14 16:04:13 66

原创 C/C++ 调用lua脚本

安装需要lua和luajityum install luayum install luajit-devel.x86_64 # luajit是嵌入lua脚本引擎示例// fst.cc#include <functional>#include <iostream>#include <memory>#include <regex>#include <string>extern "C" {#include <laux

2021-05-11 08:40:07 377

原创 Qt Json 1:序列化与反序列化

#include <QCoreApplication>#include <QJsonDocument>#include <QString>#include <QDebug>#include <QJsonObject>#include <QJsonValue>#include <QJsonArray>#include <QVariantMap>#include <QVariant>s

2021-04-28 15:43:07 1845

原创 Qt 事件处理过滤器:eventFilter

[virtual] bool QObject::eventFilter(QObject *watched, QEvent *event)如果此对象已作为监视对象的事件筛选器安装,则筛选事件。在重新实现此函数时,如果要过滤掉事件,即停止进一步处理,则返回true;否则返回false。也可以在其中处理消息事件。比如为一个控件添加事件处理,但是不想再次包装控件,就可以用installEventFilter从外部处理事件类型class Q_CORE_EXPORT QEvent .

2021-04-28 15:15:40 627

原创 达夫设备(duff‘s device)

达夫设备用于拷贝加速#include <ctime>#include <iostream>void my_memcopy_0(void *dest, const void *src, size_t len) { char *d = (char *)dest; char *s = (char *)src; for (int i = 0; i < len; ++i) { d[i] = s[i]; }}void my_memcopy_1(voi.

2021-04-01 16:55:03 547

原创 Qt反射初探

// reflexdemo.h#ifndef REFLEXDEMO_H#define REFLEXDEMO_H#include <QObject>class ReflexDemo : public QObject { Q_OBJECTpublic: explicit ReflexDemo(QObject *parent = nullptr); Q_INVOKABLE void public_method(int a); void no_q_invokable_pub

2021-04-01 15:42:59 213

空空如也

空空如也

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

TA关注的人

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