自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 资源 (1)
  • 收藏
  • 关注

原创 C++23新特性个人总结

本文主要是比较粗略地介绍了c++23新特性,已经对语法、关键字、宏、属性等分类。如有问题,欢迎指出。

2023-06-08 00:13:51 3513

原创 【编译原理】json解析器的全流程实现

目录一、json结构1. 数据类型2. 语法二、文法1. 词法设计2. 语法设计3. 文法符号分析4. 文法DFA5. 文法分析表三、程序实现1. 程序思路2. 源码实现3. 测试测试代码测试结果四、结语一、json结构简单地介绍一下json的数据类型和语法1. 数据类型json每一个数据都是一个“对象”,其数据类型有6种:null、array、object、bool、number、string。2. 语法一个文件只能有

2021-10-25 16:09:02 3582 4

原创 【编译原理】有限自动机在语法分析中的应用

前言本章将使用一个具体的例子来说明。例子:数学代数方程的分析一、需求说明1. 代数用字母+数字表示,且首字符是字母2.

2021-09-07 14:14:00 1029

原创 【C++数据结构】四叉树与平面碰撞检测

目录原理一. 四叉树1. 树的结构2. 数据的插入3. 数据的删除4. multimap的作用二. 碰撞检测1. 碰撞本质2. 碰撞检测机制的原理3. 与四叉树的结合源码实现测试案例测试代码运行结果:原理一. 四叉树1. 树的结构①树的每一个结点要么没有子结点,要么就有四个子结点,结点可以不存放数据。②在此次实现中,数据只存放于叶子结点,叶子结点中可存放多个数据,并使用链表存放数据。③每个数据视情况可插入到多个叶子结点中,.

2021-05-10 21:48:11 1778 2

原创 实时更新的排行榜

这是根据实际开发经验总结出来的一个排行榜维护工具。假设排行榜按积分来排序,核心功能需求:①某一个用户积分改变后,需要立即更新受影响用户的名次;②同分情况下,先来的用户占据排前面,后来的用户排后面。实现用一个支持随机访问的容器(如动态数组)保存用户数据(包括用户ID和用户积分)作为排行榜,下标+1即名次,另外用一个映射容器(如Map、HashMap)存放用户ID到名次的映射,value - 1即数组索引,用于快速获取用户的名次。情况分三种:①用户已在排行榜,积分发生了增加或减少;②当新用户

2021-04-08 00:14:50 993

原创 C++协程库实现

概念 协程,是一个程序组件,其功能其实就是执行一段可由用户随时中断或继续运行的代码,可与异步机制结合。一个线程中,可存在多个协程。实现 windows平台下具有Fiber概念,其API提供了创建CreateFiberEx、删除DeleteFiber、切换SwitchToFiber的接口,Fiber可看作是协程在windows平台下的实现。 linux平台下我这里使用glibc提供的ucontext实现(感谢网友的贡献,让我抄一下代码),需手动实现保存...

2021-03-15 21:10:03 1263

原创 用内存池简单模拟内存分配

前言本篇文章仅学习用,并无实际应用场景。内存管理是为了将有限的空闲有效地利用起来,虽然标题说的是内存分配,实际上也包含回收和内存碎片整理的功能,当然也只是简单模拟一下。原理1. 内存池 内存池的空间是有限的,且不能增加不能减少;内存池不是只分配一种类型的对象,而是可以分配多种类型的对象。为了方便,将空闲的内存块和占用的内存块分别放到两个链表来管理。2. 内存块 类型不同,那占用空间就可能不同。为了解决不同占用空间的对象之间不会存在冲突的内存地址,为每个...

2021-03-01 00:07:04 345

原创 libhv踩坑记(一)

关于libhv框架我这里就不做描述了,这里有作者本人的介绍https://blog.csdn.net/gg_simida/category_9866493.html我主要做一些在使用libhv时遇到的一些问题。好,入正题。我的libhv框架是在2021年1月10日从github:https://github.com/ithewei/libhv/上下载下来的,并且非Debug编译生成了静态库来使用的。编译环境:win10专业版 cmake3.19.2 x64先放入我的测试代码服务端:.

2021-01-25 23:50:57 7952 9

原创 C++线程池的实现

编译环境:C++11线程池源码:#ifndef THREAD_POOL_H#define THREAD_POOL_H#include <thread> // std::thread#include <functional> // std::function#include <mutex> // std::mutex std::unique_lock#include <chrono> // std::chrono#include &lt

2021-01-16 10:38:52 306

原创 位集Bitset的实现

本次带来Bitset模板库,除了跟标准库作全部兼容之外,还对C++14及以上版本环境进行了优化,可将对象声明为constexpr。编译环境:C++11源码:#ifndef BITSET_H#define BITSET_H#include <iosfwd>#include <string>#if __cplusplus >= 201703L#define CXX17_CONSTEXPR constexpr#else #define CXX17_CO

2020-12-01 00:53:10 269

原创 【C++数据结构】哈希表HashMap与HashSet

1. 前言 当前的存储结构本质上只有两种:数组、链表。

2020-10-21 00:45:04 2796

原创 C++20新特性个人总结

C++20新特性

2020-06-26 21:54:40 22427 10

原创 无重复字符的最长子串——C++实现

题目如标题。分析过程:最终目标:最长子序列。目标翻译:找到最长子序列的开始位置和结束位置。过程:①先找到一个递增子序列,用三个标记 记录其开始位置beg1、结束位置end1、元素个数len1。②遍历下一个递增子序列,用另外三个标记 记录其开始位置beg2、结束位置end2、元素个数len2。③比较len1和len2,如果len2 < len1,则复用标记beg2、end2、len2;否则复用beg1、end1、len1。④遍历下一个递增子序列,用复用的标记beg、end

2020-06-25 01:14:21 1838

原创 MinGW编译,其他win平台运行的方法

最近有一个朋友,想要看一下他设计的数学概率模型,验证一下模型的可行性,然后就找到了我,要我写一个脚本模拟运行一下他的模型。他没有任何的开发环境,只有一个普普通通的windows系统。本来我打算用python写,但是无奈,没有pyinstaller,想安装但是又被墙了,没办法,只能靠自己电脑上的MinGW编译出来的exe了。写好之后,把这个exe文件发给了他,但是缺了一个又一个的dll文件。...

2020-03-23 23:59:53 621

原创 【C++数据结构】Trie树

具体的Trie树结构请自行查找,下面只说我自己那部分的理解。①Trie树是一棵多叉树,那么管理好子结点对树的性能有很大的帮助,为了通用,我使用了红黑树结构作为子结点的管理结构。当然如果是查找英文串什么的,可以使用数组或者哈希。②Trie树是一棵前缀树,对前缀处理方便,我在此对后缀情况不作处理。③Trie树不宜随便删除结点,因此我也不提供删除功能,只提供修改功能。关于Trie树...

2020-03-10 00:37:08 258

原创 【C++算法】快速排序

基准数的选择:采用范围的中间位置的数编译环境:C++11代码实现如下:#include <type_traits> // std::declval typedef unsigned long size_type; template<typename _Tp>constexpr size_type distance(const _Tp &_1,...

2020-02-14 11:09:09 827

原创 【C++算法】计数排序

计数排序,并非基数排序。暂时只支持数值型编译环境:C++11代码实现如下:#include <cstring> // std::memset#include <type_traits> // std::declval/* 计数排序 * [@beg, @end) 待排序的范围,同时保存结果,须支持前向迭代 * [@min, @max) 待排序范围的...

2020-02-14 10:49:30 427

原创 【C++算法】希尔排序

编译环境:C++11代码实现如下:#include <cmath> // std::log2 std::pow#include <type_traits> // std::declvaltypedef unsigned long size_type;template<typename _Tp>constexpr size_type dis...

2020-02-14 10:39:47 450

原创 【C++算法】归并排序

这里不介绍归并排序的具体算法,不懂的可以看百度百科。编译环境:C++11代码实现如下:#include <type_traits> // std::declvaltypedef unsigned long size_type;template<typename _Tp>constexpr size_type distance(const _Tp &a...

2020-02-14 10:34:32 493

原创 【C++算法】插入排序

本次实现的,是直接插入排序算法,暂时不做优化。编译环境:C++11代码实现如下:template<typename _Tp>struct Comparator{ int operator()(const _Tp &arg1, const _Tp &arg2) const { if(arg1 < arg2) retu...

2020-02-14 10:20:48 176

原创 【C++算法】冒泡排序及其优化

关于冒泡排序算法,这里就不多说了。简单说一下优化,一般的冒泡排序是单向的,而其优化之一就是双向冒泡:正向扫描获取最大值,反向扫描获取最小值。由于C++11以前的实现有点复杂,在此就基于C++11新特性来实现,并写成库的形式。编译环境:C++11代码实现如下:#include <type_traits> // std::declvaltemplate<ty...

2020-02-14 10:07:06 337

原创 【C++数据结构】二叉树之三红黑树

本次实现的红黑树为基于上篇实现的普通二叉树之上实现的,普通二叉树的实现已经在https://blog.csdn.net/qq811299838/article/details/104038745这篇文章中列出,此处就不再放出来了。由于网上已经有很多红黑树的算法介绍,本文将不再介绍算法,只提供代码实现以及测试代码,如有问题,欢迎指出!关于结点删除:选用被删除结点中,左子树深度比右子树大,则选...

2020-02-13 10:30:18 279

原创 【C++数据结构】二叉树之二AVL树

本次实现的AVL树为基于上一篇实现的普通二叉树之上实现的,普通二叉树的实现已经在https://blog.csdn.net/qq811299838/article/details/104038745这篇文章中列出,此处就不再放出来了。AVL树使用普通二叉树的功能采用组合方式而非继承。AVL树最大的特点是每一个结点的左右子树的高度差都在2以内,特点比较简单,因此也容易实现。编译环境:GC...

2020-02-07 15:43:42 339

原创 【C++数据结构】二叉树之一普通二叉树

本次实现为平衡二叉树做基础,如有问题,欢迎指出!编译环境:GCC 7.3、vs 2005该普通二叉树的功能有:1. 新增结点。2. 删除结点。具体思路:①当被删除结点的左子树深度大于右子树时,将被删除结点 与 左子树中序遍历顺序的最后的结点 交换数据,然后以被交换的结点作为被删除的结点,继续执行删除操作,直到被交换的结点是叶子结点时,直接删除该叶子结点。②当被删除结点的左子...

2020-01-19 11:50:24 231

原创 【C++数据结构】单向链表forward_list实现

本次实现只是练习而已,如有问题,欢迎指出!编译环境:GCC 7.3、vs 2005与标准库list的差异:1. 没有splice2. 没有assign3. 没有resize好了,直接上代码:#ifndef __FORWARD_LIST_H__#define __FORWARD_LIST_H__#if __cplusplus >= 201103L#incl...

2020-01-15 17:30:28 497

原创 【C++数据结构】双向链表list实现

本次实现也是练习而已,如有问题,欢迎指出!编译环境:GCC 7.3、vs 2005与标准库list的差异:1. 没有splice2. 没有uniqe3. 没有merge4. 没有sort好了,直接上代码:#ifndef __LIST_H__#define __LIST_H__#if __cplusplus >= 201103L#include &lt...

2020-01-13 11:52:20 277

原创 【C++数据结构】动态数组vector实现

实现的vector跟标准库有那么一点点不同:1. 支持头部插入和删除,但头部无空位时插入失败2. 不检查越界3. resize后改变capacity,如果此时size大于capacity,则size = capacity,否则,size不变本次实现也是练习而已,如有问题,欢迎指出!编译环境:GCC 7.3、vs 2005很久以前实现过一次,现在重新实现,当作练习...

2020-01-11 11:39:57 296

原创 C++字符串格式化的实现

关于C++字符串格式化,其实是我在用C++输出时间字符串时想用到的,格式化有时候是个很方便的东西,但是找着网上也没有什么好用的方法,所以就自己实现了一个。时间复杂度为O(n),基本就是遍历一遍待格式化的字符串。还有,代码未经优化,先看着吧,有空再优化。为了解决变长模板参数就已经绞尽脑汁了,再弄下去头发都掉光了。C++标准:C++17以上#ifndef __FORMAT_H__#de...

2019-12-28 16:26:33 968 2

原创 C++冷知识(四)——类对象及虚函数表的内存空间排布

讲正题之前先复习一下指针的占用空间大小。指针的占用空间与编译器位数有关,当编译器为64位时,指针占用空间为8字节;当编译器为32位时,指针占用空间为4字节。其实指针也就是地址,保存一个指针的占用空间与一个地址的大小是一样的。1、普通类(即没有虚基类和虚函数)的对象中,其内存中保存的数据即为基类的非静态数据成员与当前类的非静态数据成员 及 内存对齐所占用的额外空间。2、重点来了,对于存在...

2019-09-18 00:00:40 670

原创 C++冷知识(三)——大字节基本数据类型

C++内置的基本数据类型还有两种1、long double该类型属于浮点数类型,具体实现、占用字节由编译器和硬件平台决定,字节大小有8、10、12、16字节等,我本人的编译器为64位GCC 8.1,字节大小为16字节。2、__float128该类型是四精度浮点数类型,占用16字节。现在还没有128位的机器,所以,这种类型的数据由软件控制,而不是由硬件支持,性能、效率等等指标不太清楚...

2019-09-10 20:55:01 498

原创 C++冷知识(二)——类型判断之性能优化

这一版主要介绍C++的关键字,都是两个下划线开头的,所以,不是非常熟悉的话建议不要使用,主要用于标准库内部使用。目录1、__is_trivial2、__is_trivially_copyable3、__is_standard_layout4、__is_pod5、__is_literal_type6、__is_empty7、__is_polymorphic8、__...

2019-09-08 23:32:00 1746 1

原创 C++冷知识(一)——简单类型判断

1、__is_enum关键字获取一个类型是否是枚举类型2、__is_union关键字获取一个类型是否是共用体类型3、__is_class关键字获取一个类型是否是结构体或类类型用法:#include <iostream>union A { };struct B { };enum C { };class D { };template<...

2019-08-26 09:01:20 834

原创 C++17新特性个人总结

目录C++171 关键字1.1 constexpr1.2 static_assert1.3 auto1.4 typename1.5 inline2 语法2.1 折叠表达式2.2 结构化绑定2.3 允许非类型模板参数进行常量计算2.4 条件分支语句初始化2.5 聚合初始化2.6 嵌套命名空间2.7 lambda表达式捕获*this的值...

2019-05-20 11:42:52 31289 7

原创 C++14新特性个人总结

目录1 关键字1.1 auto1.2 constexpr1.3 decltype2 语法2.1 二进制数常量2.2 单引号作数字常量分位符2.3 运行期在栈上创建数组2.4 变量模板2.5 lambda表达式3 属性3.1 deprecated编译器版本:GCC 6.1、LLVM 3.4__cplusplus:201402L1 关键...

2019-04-15 21:43:42 779

原创 C++11新特性个人总结

C++11新特性

2019-04-14 23:08:10 1375 2

C++20新特性.pdf

这是C++20新特性英文文档,基本涵盖了C++20的所有新特性。在这里提供给大家一起学习、研究,借此机会推广C++。

2020-06-26

空空如也

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

TA关注的人

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