银行卡号码校验算法 背景 最近在办卡的时候发现,两个相邻的人办卡,他们的卡号乍一看并不是连续的,但是把最后一位除掉之后却是连续的,很容易猜想最后一位应该是校验位。 银行卡号码的校验规则 银行卡号码的校验采用Luhn算法,假设有银行卡号如下: 图1 我们使用不同的颜色对奇数和偶数部分进行区分。 红色部 Read More
posted @ 2024-02-25 15:07 鸿钧三清 Views(34) Comments(0) Diggs(0) Edit
# C++使用ranges库解析INI文件 # 引言 C++20引入了\头文件,C++23对其进行了完善,本文将使用该头文件提供的adaptor编写一个简单的ini解析器。 ## ini文件格式介绍 *** 一般的ini文件由section和entry部分,比如 ```ini [section] k Read More
posted @ 2023-06-20 09:34 鸿钧三清 Views(72) Comments(0) Diggs(0) Edit
# C++ 如何快速实现一个容器的迭代器 ## 引言 C++的标准库中的容器都会提供迭代器,如果一个容器满足forward_range,那么这个容器一般会提供以下成员类型和函数: - iterator - const_iterator - begin - end - begin - cend 如果该 Read More
posted @ 2023-05-19 19:16 鸿钧三清 Views(148) Comments(0) Diggs(0) Edit
C++如何实现容器的Copy/Move/Swap方法 1、引言 目前网上有很多关于如何编写C++容器的教程,比如各种“手写STL”之类的文章和视频,但是这些教程中的容器一般都不包括allocator,比如: template <typename T> class MyVector { ... }; Read More
posted @ 2023-05-09 09:29 鸿钧三清 Views(76) Comments(0) Diggs(0) Edit
C++ 结构体对齐 引言 数据结构对齐是数据在计算机内存中排列和访问的方式。它由三个独立但相关的问题组成:数据对齐、数据结构填充和打包。现代计算机硬件中的 CPU 在数据自然对齐时最有效地执行内存读取和写入,这通常意味着数据的内存地址是数据大小的倍数。例如,在 32 位架构中,如果数据存储在四个连续 Read More
posted @ 2023-04-20 21:02 鸿钧三清 Views(192) Comments(0) Diggs(0) Edit
C++ 按照字典序实现combination 引言 C++ STL提供了permutation相关的函数(std::next_permutation和std::prev_permutation),但是没有提供combination相关的函数,本文将基于字典序的方法实现一个combination相关的 Read More
posted @ 2023-04-11 22:00 鸿钧三清 Views(109) Comments(0) Diggs(0) Edit
Mark & Copy 算法 1、引言 Garbage Collector(GC)广泛存在于现代流行的编程语言之中,比如Java,C#,Python等。笔者认为结合源代码学习可以更加有效地了解一个算法,但是在网上找到更多的是Mark&Sweep算法,如http://journal.stuffwith Read More
posted @ 2023-04-03 20:19 鸿钧三清 Views(57) Comments(0) Diggs(0) Edit
以前刚学C++是书上说引用是变量的别名,这个说法感觉不能很好的理解引用的本质,加上C++和java等其他语言的引用也不完全一样感觉还是要比较实际代码才行。 在这里简单比较一下引用和指针在汇编代码上的的区别: 编译器: x86-64 gcc 9.3c++标准: -std=c++17不做任何优化 在线编 Read More
posted @ 2020-04-07 23:44 鸿钧三清 Views(247) Comments(0) Diggs(0) Edit
在数字图像处理中,Lena(Lenna)是一张被广泛使用的标准图片,特别在图像压缩的算法研究中。 (为什么用这幅图,是因为这图的各个频段的能量都很丰富:即有低频(光滑的皮肤),也有高频(帽子上的羽毛),很适合来验证各种算法) 然而,这张图片背后的故事是颇有意思的,很多人都抱有学究都是呆子的看法,然而 Read More
posted @ 2020-02-02 11:05 鸿钧三清 Views(4496) Comments(0) Diggs(0) Edit
#include <iostream> using namespace std; constexpr int MEMORYPOOL_ALIGNMENT = 8; //对齐长度 // 内存块 template<typename _T> struct MemoryBlock { int nSize; / Read More
posted @ 2020-01-11 23:27 鸿钧三清 Views(493) Comments(0) Diggs(0) Edit