自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 合并俩个有序链表

合并俩个有序链表的俩种算法,一般的合并算法和递归算法,附C++代码实现

2023-01-26 11:35:23 124

原创 B+树的插入、删除和分裂,注意国内教材和国外的对于B+树的定义的不同

B+树的插入、删除、分裂等操作。

2022-11-03 11:15:24 1258 1

原创 C++使用std::thread 多线程展开for循环,for循环并行计算

比如说有一个for循环,需要迭代100次,来累加1+2+3…+100计算其结果,创建10个线程,第一个线程累加1+2+…+10,第二个线程计算11+12+…+20等。那么如何优化呢?其实OpenMP库是可以直接调用的,只需要在for循环上面加一个指令 “#pragma omp parallel for num_threads(10)” 即可,非常简单。Intel TBB 线程库也可以很简单的做到,具体不介绍下面介绍如何使用标准库std::thread手动分割任务 。如果任务数除以线程数有余数,那么把.

2022-05-28 16:53:07 7159

原创 Intel TBB 提供的 自旋的读写锁 spin_rw_mutex.h speculative_spin_rw_mutex

Intel TBB的自旋的读写锁简单代码示例

2022-05-27 21:39:00 462

原创 Intel TBB 线程安全 ,支持并发的concurrent_hash_map

需要安装intel 的tbb库,怎么安装,请另查编译时加上-ltbb -pthread即可。eg. g++ test.cc -ltbb -pthread比自己用c++的unordered_map和加锁mutex性能要高不少#include <iostream>#include <tbb/concurrent_hash_map.h>using namespace std;int main() { tbb::concurrent_hash_map<in.

2022-05-25 14:25:47 460

原创 TSX指令集之RTM无锁并发能加快速度吗?与mutex加锁比较

下面是实验代码和截图。需要确保自己的服务器CPU能支持RTM指令集,如何查看能否支持RTM指令集不做介绍编译指令:g++ test4.cc -std=c++11 -pthread -mrtm-mrtm表示使用rtm指令集,需要导入头文件#include <immintrin.h>#include <immintrin.h>#include <sys/time.h>#include <iostream>#include <thread&

2022-05-24 14:41:35 518

原创 TSX指令集中的 RTM 受限的事务内存 来实现并发无锁编程

RTM 功能的头文件可以引入#include <immintrin.h>以下文件编译指令g++ test.cc -pthread -std=c++11 -mrtm前提是你的服务器支持RTM指令集,通过cat /proc/cpuinfo查看flags一项中是否包含rtm即可:cat /proc/cpuinfo | grep rtm下面的程序的输出结果为100,因为有10个线程,每个线程在a上面累加10,输出结果为100,符合预期。RTM指令集包括4个函数:_xbegin(),_xend(.

2022-05-24 14:04:20 472

原创 C++空闲内存空间简单管理

#include <stdlib.h>#include <iostream>using namespace std;typedef struct Node { int a; int b;} Node;int main() { char * free_node = nullptr; Node* n1 = (Node*) malloc(sizeof(Node)); n1->a = 1; Node* n2 = (Node

2022-05-19 21:15:57 176

原创 SSE2指令集 SIMD指令 之 _mm_cmpeq_epi8 来比较俩个字符串

__builtin_ffs(x)是gcc 内建函数,具体意义另查。只提供简单代码,使用SSE2指令集,使用SIMD来加速字符串比较。当然不一定是字符串比较,示例中的arr1和arr2也可以看成是其他类型的数据的一种封装。最后,while循环里面输出的jj就是arr1和arr2中每一个字符相同的位置。#include "hash_util.h"#include <stdio.h>#include <immintrin.h>#include <assert.h>

2022-05-09 15:05:21 1438

原创 Linux pthread.h 中的 pthread_create创建线程 循环传递参数

看了一圈,外面垃圾博客太多,全是抄袭,每一个提到要点。#include <stdio.h>#include <string.h>#include <pthread.h>void* print(void* data){ printf("%d\n", (int) (long long) data);}int main(){ pthread_t tid[3]; for (int i = 0; i < 3; i++) {

2022-05-08 20:44:58 376

原创 windows上的 vscode 使用密钥连接远程服务器开发

win上的vscode安装Remote-SSH插件点击左侧栏的远程资源管理选择:ssh target点击设置图标,弹出win用户家目录的下的.ssh\config配置文件,添加配置,目前只需要配置2项即可,远程服务器的ip以及登录远程服务器的用户名,保存即可Host Tencent HostName 82.111.111.11 User root选择远程服务器右侧的小窗口新建窗口连接即可:需要选择远程服务器的类型,Linux,mac,还是win,选择后需要输.

2022-01-13 15:05:57 1923

原创 Could not connect to Redis at 127.0.0.1:6379: Connection refused

如果在redis.conf配置文件中修改过端口号,去执行./redis-cli时会报此错误,应该加上./redis-cli -p xxxx

2021-08-20 16:33:41 206

原创 emcc -v出错?记一次及其艰难的emscripten的安装(webassembly)

官方文档地址:戳我官方文档给出的安装步骤:./emsdk install latest./emsdk activate latessource ./emsdk_env.sh这三步足以折磨人了!【最后:source ./emsdk_env.sh】配置环境应该不是永久的,只要切换新窗口就不行,每次打开一个窗口需要重新执行这一行命令!【我的环境】centos 7【虚拟机】首先克隆:git clone https://github.com/emscripten-core/emsdk.git克隆出

2021-08-06 17:40:33 1529 1

原创 c++中的vector清空容器

注意:clear()方法只清空size(),不清空capacity()swap()方法俩者都清空#include <iostream>#include <vector>#include <string>using namespace std;class People{public: static vector<int> a;};vector<int> People::a(0);int main()

2021-08-06 11:24:18 850

原创 error: ‘dynamic_cast’ not permitted with -fno-rtti

在使用nan方式的nodejs的c++扩展时,使用node-gyp编译c++源码时,报错error: ‘dynamic_cast’ not permitted with -fno-rtti是因为在c++源码中使用了dynamic_cast类型强转而报错,这个dynamic_cast需要有RTTI的支持,所以在binding.gyp的配置文件中加上:'cflags_cc!': [ '-fno-rtti' ] 就可以了。...

2021-08-02 13:58:53 821

原创 C++中dynamic_cast简单例子

#include <iostream>using namespace std;class Animal{public: virtual void eat() = 0;};class Dog: public Animal{public: virtual void eat(){ cout << "狗狗吃东西" << endl; } void bite(){

2021-08-02 13:45:39 130

原创 Nodejs用Nan的方式C++扩展并调用C++动态链接库

0.说明nodejs调用c++扩展有多种方式,这里使用Nan方式1.环境centos 7;nodejs v12.22node-gyp2.安装nan如下图所示,项目目录名为nan-test,首先在该项目目录下安装nan,npm install --save nan,安装成功后在项目目录下出现一个node_modules,里面有一个nan目录3.制作一个测试用的动态库如上图shared目录所示,calculate.hdouble add(double a, double b);doubl

2021-08-02 11:59:10 897

原创 NODEJS中的exports和module.exports

1 exports用法function func1(){ return "world";}exports.hellos = func1; //exports.后面才是向外面暴露的名字, //在外面需要使用hellos调用函数,func1是无效的exports.name = "mary";exports.age = "19";exports.hellos2 = function(){ //匿名函数 console.log("hello");}require("

2021-08-01 15:12:23 142

原创 centos 7 : node-gyp: command not found

全局安装后:npm install node-gyp -g找不到node-gyp建立软连接ln -s /usr/local/node/bin/node-gyp /usr/local/bin/node-gyp

2021-07-30 09:54:28 1290

原创 makefile中使用带颜色的字体(红色、绿色)打印到终端

效果

2021-07-27 14:21:02 1178

原创 C语言调用friso库实现中文分词器

friso中文分词器库的安装及详细说明见github:https://github.com/lionsoul2014/friso/tree/bb35f949efaeb26f33723719dad9adfd4e283995#include <friso/friso.h>#include <stdio.h>#include <string.h>//安装目录中的配置文件位置char* setting_file_addr = "/root/friso/friso.

2021-07-13 22:56:18 489 1

原创 Linux中C语言使用openssl的加密算法库实现md5,sha2,hmac等哈希算法

需要提前在linux中安装openssl#include <openssl/md5.h>#include <string.h>#include <stdio.h>#include <openssl/sha.h>#include <openssl/hmac.h>void genMD5(unsigned char* output_md5, const char* msg){ MD5_CTX ctx; MD

2021-07-13 22:52:34 1160

原创 Linux中通过编写makefile将多个C语言文件编译成一个动态链接库

环境:centos7写头文件:在测试文件夹test目录下,建立一个mycompute目录,专门用于存放.h头文件,如下图所示:四个.h头文件内容分别是:add.hsub.hmul.hdiv.h写.c程序:在测试目录test中写四个h头文件中申明的函数的实现。add.cint add(int a, int b){ return a + b;}sub.cint sub(int a, int b){ return a - b;}mul.cint mul(int

2021-07-13 22:44:23 2629 2

原创 vs2019创建windows上的c++动态链接库

1. 创建项目设置成x64创建一个vs的动态链接库项目,如下图所示创建完成后附带文件如下图所示2.编写项目创建一个头文件add.h,创建一个源文件add.cpp完成加法运算,add.h代码如下:#pragma once#ifdef ADD_H#define API_SYMBOL __declspec(dllexport)#else#define API_SYMBOL __declspec(dllimport)#endifextern "C" API_SYMBOL int a

2021-07-04 10:56:15 407

原创 塞尔达 双子的记忆 希贝尼罗神庙

希贝尼罗神庙 上面的神庙 解锁51242(面向白色的栅栏门而言,最左边是1,最右边是5,一行一个数字)希贝尼亚斯神庙 下面的神庙 解锁24135

2021-04-11 22:46:49 9227

原创 简单的hash查找

public static void main (String[] args) throws java.lang.Exception { //假设N个数,数的范围在0-99,快速查找某个数k是否在其中 //简单的hash查找 //比如有数23,46,38,2,96,查找7是否在其中 int []a = new int[100]; a[23] = 1; a[46] = 1; a[38] = 1; a[2] = 1; a

2021-03-27 10:25:18 129

原创 gcc编译和链接以及makefile文件的编写

创建一个jia.c和jia.h完成加法功能jia.hint add(int,int);jia.cint add(int a, int b){ return a + b;}创建一个main.c#include <stdio.h>#include "jia.h"int main(){ printf("%d + %d = %d\n", 1 , 2, add(1,2)); return 0;}使用gcc -c main.c只会生成目标文件main.o,不会链接;使

2021-03-23 20:39:53 304

原创 C使用异或不额外增加空间交换俩个数

#include <iostream>using namespace std;int main(){ int a = 2; //2的二进制是 10 int b = 3; //3的二进制是 11 a = a ^ b; // ^符号表示按位异或,11和10异或得:01,即 a = 01, b = 11 b = a ^ b; //01和11y异或得 10,即 a = 01, b = 10; a = a ^ b; //01和10异或得11,即a = 11, b = 10,

2021-03-14 20:38:29 75

原创 记一次mac pro系统升级崩溃事件

事情已经过去快一天了,现在才想起记录一下,所以现在是靠着记忆来写的,难免有疏漏,但总体不偏;崭崭新的big sur系统来了,每天都会在屏幕右上角弹窗提示你升级,就在昨天,我终于忍不住了,决定升级;升级前把几份重要的文件备份了(幸亏备份了啊!!);升级系统前电脑还剩19G可用空间(这也是我迟迟不升级的原因,内存太小了),然而安装包是12G, 嚯!;升级了好几次,都提示软件错误,网上说内存太小了,我也感觉是的,索性把一些东西删了,然后就开始正式升级了;经过比1个小时还要漫长的30分钟等待,然后崩溃了,说升

2021-02-06 17:45:28 691 1

原创 Java垃圾回收机制

1 垃圾对象的判定算法对象被判定为垃圾的标准:没有被其他对象引用判定对象是否为垃圾的算法:引用计数算法、可达性分析算法1.1 引用计数算法每个对象实例都有一个引用计数器,被引用则+1,完成引用则-1;任何引用计数为0的对象实例可以被当作垃圾收集。优点:执行效率高,程序执行受影响较小;缺点:无法检测循环引用的情况,导致内存泄漏真实的情况是,主流的虚拟机和java并没有采用这种算法。但是python中用的是这种算法。关于循环引用上图俩个对象相互引用了,引用计数值都大于0,但是在java

2021-01-25 18:28:49 67

原创 IDEA的SpringBoot聚合工程+nginx配置https服务

1.Springboot聚合工程打包jar这里的Springboot项目是为前后端分离的项目,这里的https配置是在nginx中配置的,所以原有的springboot项目不需要任何和https相关的配置,包括ssl证书也不需要放在项目里面,所以在给聚合工程打包的时候只需要把(可能需要)你的数据库,redis等等的地址改一下就行了。这里不说springboot聚合工程如何创建了,只说一下如何打包。父工程的pom.xml中配置的打包方式是pom,所有的子工程的打包方式是jar打包。另外,只有启动类

2021-01-22 16:06:17 444

原创 C++中的map容器的删除、插入、遍历

#include <map>#include <iostream>#include <string>#include <algorithm>using namespace std;struct Display{ void operator()(pair<string,double> info) { cout << info.first << ":" << info.second &l

2021-01-05 10:05:35 226

原创 待排序列采用带头结点的单链表,请写出在其上进行快速排序的递归算法。

#include <iostream>using namespace std;typedef struct LNode{ int data; struct LNode *next;}LNode;/* 带头结点的链表有元素如下 [23, 17, 45, 21, 6, 14, 56, 50] 现在要对链表元素进行快速排序 设原始链表的元素顺序和上述的数组的顺序一致;*/void createList(LNode *p, int *R, int n) //生成单链表{

2020-09-06 23:09:05 358

原创 非空二叉排序树上查找元素值为e的结点,若存在返回其指针;若该结点不存在,则插入一个元素值为e的新结点,并返回新结点的指针;

#include <iostream>using namespace std;/* 非空二叉排序树上查找元素值为e的结点,若存在返回其指针;若该结点不存在, 则插入一个元素值为e的新结点,并返回新结点的指针; 欲建树: 7 / \ 5 9*/ typedef struct { int key; char info[10];} elemtype;typedef struct node {

2020-09-05 16:20:17 343

原创 给定一棵用二叉链表表示的二叉树,给定其中的结点 x 和 y,编写算法, 显示 x 和 y 结点的所有共祖先结点的值。

基本思路:分别找到结点x的所有祖先结点和y的所有祖先结点,分别存在不同的数组中,最后比较俩个数组,选择相同的输出,就是公共的祖先;#include <iostream>using namespace std;# define maxSize 10//树结点的结构体,存储的是int整型的数据typedef struct BTNode{ int data; struct BTNode *lchild; struct BTNode *rchild;}BTNode;/* 目标遍历的

2020-09-04 19:32:01 894

原创 编程实现链式存储结构上交换二叉树中所有结点左右子树的算法

编程实现链式存储结构上交换二叉树中所有结点左右子树的算法#include <iostream>using namespace std;# define maxSize 10//树结点的结构体,存储的是int整型的数据typedef struct BTNode{ int data; struct BTNode *lchild; struct BTNode *rchild;}BTNode;/* 二叉树的层次遍历 目标遍历的二叉树: 1 / \ 2

2020-09-04 16:14:46 2616

原创 二叉排序树的构造、插入结点、查找

#include <iostream>using namespace std;typedef struct BTNode{ int key; struct BTNode *lchild; struct BTNode *rchild;}BTNode;//二叉排序树的关键字查找BTNode* BSTSearch(BTNode* bt, int key){ if (bt == NULL) return NULL; if (bt->key == key) retur

2020-08-31 23:01:54 259

原创 查找算法--二叉排序树算法(C++实现完整代码)

如下图所示是某个排序二叉树,什么是排序二叉树?。。。下面的算法实现的是查找某个关键字是否在这棵树上的某个节点中。算法分为俩个部分,第一部分为二叉排序树的创建,第二部分是二叉排序树查找算法;#include <iostream>using namespace std;typedef struct BTNode{ int key; struct BTNode *lchild; struct BTNode *rchild;}BTNode;void createBST(BTNode

2020-08-31 21:37:20 1361

原创 查找算法1--折半查找(C++完整代码实现)

折半查找要求线性表有序的下面的这种查找算法采用递归实现,并没有利用折半查找有序的特性,所有下面的这种算法适用于其他特殊线性表;#include <iostream>using namespace std;//递归实现的查找算法int Bsearch(int *R, int low, int high, int key){ if (low > high) return -1; int mid = (low + high) / 2; if (R[mid] == ke.

2020-08-31 20:50:06 3593

原创 排序算法7--二路归并排序(C++完整代码实现)

#include <iostream>using namespace std;//归并函数void merge(int *R, int low, int high){ int mid = (low + high) / 2; //需要定义一个额外的数组,临时存放归并的结果 int maxSize = high - low + 1; int temp[maxSize]; int k = 0; int i = low; int j = mid + 1; while (i &l.

2020-08-27 09:48:02 2957

空空如也

空空如也

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

TA关注的人

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