自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 QML+OpenCV 图像处理编辑器

程序执行的效果如下,

2023-04-17 08:16:40 538

原创 Conan自己设定编译选项编译项目

Conan是一个C++的库管理工具。但是有的时候,我们要的有些选项在conan默认编译的时候是关闭的。这个时候就需要我们修改编译选项重新本地编译库再进行使用。例如本人曾经使用Poco库时,需要使用PageCompiler功能,默认conan编译Poco时关闭了此功能,生成的binary中没有PageCompiler,这样就无法使用此功能。修改编译选项为自己需要的选项,例如我这里是开启Poco库的PageCompiler功能。找到对应库目录下的conanfile.py,例如本例是在如下目录,

2022-12-25 09:49:43 476

原创 Linux C++ 乱码字符转换问题 GBK转UTF8

简单的code cvt转换,linux版本

2022-10-29 10:10:36 2210

原创 牛客网 - BM39 序列化二叉树 [Hard]

题目: https://www.nowcoder.com/practice/cf7e25aa97c04cc1a68c8f040e71fb84?tpId=295&tqId=23455&ru=%2Fpractice%2Fe0cc33a83afe4530bcec46eba3325116&qru=%2Fta%2Fformat-top101%2Fquestion-ranking&sourceUrl=%2Fexam%2Foj思路BFS,广度优先遍历.CMakeLists.txtmain.cpp程序输出如下,...

2022-07-18 11:39:27 205

原创 面试题-给::memcpy函数设计测试用例

用例输出的结果如下,

2022-07-16 09:36:46 159

原创 牛客网 BM85 合法IP

string算法,合法IP

2022-07-09 10:31:46 195

转载 Leetcode 75 - 颜色分类 [Medium] 三种实现方法

题目: https://leetcode.cn/problems/sort-colors/程序目录结构如下,CMakeLists.txtcmake_minimum_required(VERSION 2.6)project(sort_colors)set(CMAKE_CXX_STANDARD 20)add_definitions(-g)include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../../include)string(REPLA

2022-05-26 15:54:56 111

转载 leetcode 4 - 寻找两个正序数组的中位数 - Hard

题目: https://leetcode.cn/problems/median-of-two-sorted-arrays/程序目录结构如下,CMakeLists.txtcmake_minimum_required(VERSION 2.6)project(median_of_2_sorted_arr)set(CMAKE_CXX_STANDARD 20)add_definitions(-g)include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../

2022-05-23 09:37:44 61

转载 leetcode 540 - 有序数组中的单一元素

题目: https://leetcode.cn/problems/single-element-in-a-sorted-array/程序目录结构如下,CMakeLists.txtcmake_minimum_required(VERSION 2.6)project(single_element_in_a_sorted_arr)set(CMAKE_CXX_STANDARD 20)add_definitions(-g)include_directories(${CMAKE_CURRENT_SO

2022-05-21 06:30:14 125

转载 leetcode 81 - 旋转数组查找数字

题目: https://leetcode.cn/problems/search-in-rotated-sorted-array-ii/submissions/程序目录结构如下:CMakeLists.txtcmake_minimum_required(VERSION 2.6)project(rotated_sorted_arr)set(CMAKE_CXX_STANDARD 20)add_definitions(-g)include_directories(${CMAKE_CURRENT_S

2022-05-20 11:13:24 126

转载 leetcode 34 - 在排序数组中查找元素的第一个和最后一个位置 - Medium

程序目录结构如下,CMakeLists.txtcmake_minimum_required(VERSION 2.6)project(find_first_and_last_element_in_sorted_arr)set(CMAKE_CXX_STANDARD 20)add_definitions(-g)include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../../include)string(REPLACE ".cpp" "" file

2022-05-20 09:41:45 76

转载 leetcode 340 - 拥有k个唯一字符的最长子串 - Hard 双指针问题

题目: https://www.cnblogs.com/fatttcat/p/10302397.html程序结构如下,CMakeLists.txtcmake_minimum_required(VERSION 2.6)project(longest_substr_with_at_most_k_distinct_chars)set(CMAKE_CXX_STANDARD 20)add_definitions(-g)include_directories(${CMAKE_CURRENT_SOUR

2022-05-19 11:21:08 115

转载 leetcode 524 - 通过删除字母匹配到字典里最长单词

题目: https://leetcode.cn/problems/longest-word-in-dictionary-through-deleting/程序目录结构如下,CMakeLists.txtcmake_minimum_required(VERSION 2.6)project(longest_word_in_dict_through_deleting)set(CMAKE_CXX_STANDARD 20)add_definitions(-g)include_directories(

2022-05-19 09:57:20 67

原创 Tensorflow C++ API 生成复数算子

Tensorflow的complex 64和complex 128类型实际上是对std::complex的简单重定义。源码如下,另外加入复数类型以后发现原来的打印函数不好用了。重新用模板函数特化实现了一遍,现在算是通用了。程序结构如下,conanfile.txt [requires] gtest/1.10.0 glog/0.4.0 protobuf/3.9.1 eigen/3.4.0 dataframe/1.20.0 opencv/3.4.17 boost/1.76.0 absei

2022-05-18 20:25:08 417

转载 leetcode 76 - 最小覆盖子串[滑动窗口] Hard

题目: https://leetcode.cn/problems/minimum-window-substring/程序目录结构如下,CMakeLists.txtcmake_minimum_required(VERSION 2.6)project(minimum_window_substr)set(CMAKE_CXX_STANDARD 20)add_definitions(-g)include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../.

2022-05-18 19:35:10 78

转载 leetcode 88 - 合并两个有序数组的三种解法

题目: https://leetcode.cn/problems/merge-sorted-array/submissions/都是官方的解答。照着答案领悟了一遍,现在觉得确实在那一堆坑里面算简单的题目。程序代码结构如下,CMakeLists.txtcmake_minimum_required(VERSION 2.6)project(merge_sorted_array)set(CMAKE_CXX_STANDARD 20)add_definitions(-g)include_direc

2022-05-18 14:47:22 94

原创 C++ 指针常量和常量指针剖析

反着指针符号看,刚好通。程序结构如下,CMakeLists.txtcmake_minimum_required(VERSION 2.6)project(const_pointers)set(CMAKE_CXX_STANDARD 20)add_definitions(-g)include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../../include)string(REPLACE ".cpp" "" file "main.cpp")add

2022-05-18 11:27:14 173

转载 leetcode 406 - 根据身高重建队列

题目: https://leetcode.cn/problems/queue-reconstruction-by-height/程序的结构如下,CMakeLists.txtcmake_minimum_required(VERSION 2.6)project(queue_reconstruction_by_height)set(CMAKE_CXX_STANDARD 20)add_definitions(-g)include_directories(${CMAKE_CURRENT_SOURCE

2022-05-17 15:53:22 67

转载 leetcode 763-划分字母区间

题目: https://leetcode.cn/problems/partition-labels/本例使用题解中的贪心算法。并加了一些注释。程序结构如下,CMakeLists.txtcmake_minimum_required(VERSION 2.6)project(partition_labels)set(CMAKE_CXX_STANDARD 20)add_definitions(-g)string(REPLACE ".cpp" "" file "main.cpp")add_ex

2022-05-17 13:35:45 65

转载 leetcode 452 用最少数量的箭引爆气球

本例也是直接照抄答案,再加了一点注释。程序的目录结构如下,CMakeLists.txtcmake_minimum_required(VERSION 2.6)project(find_min_arrow_shots)set(CMAKE_CXX_STANDARD 20)add_definitions(-g)string(REPLACE ".cpp" "" file "main.cpp")add_executable(${file} "main.cpp")main.cpp#inclu

2022-05-17 11:34:30 75

转载 Leetcode 605-种花问题

题目描述如下。本文是直接按照官方题解做的解答。但是加了注释。程序结构如下,CMakeLists.txtcmake_minimum_required(VERSION 2.6)project(can_place_flowers)set(CMAKE_CXX_STANDARD 20)add_definitions(-g)string(REPLACE ".cpp" "" file "main.cpp")add_executable(${file} "main.cpp")main.cpp

2022-05-17 10:39:19 79

原创 C++11静态策略模式

本例和动态的策略模式一样。也是高层依赖于统一的策略接口,底层可以有不同的实现。但是使用模板选择不同的策略实现。[就是编译期静态选择实现]程序代码结构如下,代码如下,test/CMakeLists.txtcmake_minimum_required(VERSION 2.6)if(APPLE) message(STATUS "This is Apple, do nothing.") set(CMAKE_MACOSX_RPATH 1) set(CMAKE_PREFIX_PAT

2022-05-14 16:56:48 232

原创 C++ 11动态策略模式

本例使用虚函数和多态实现策略模式。高层方法依赖于抽象的策略指针,底层方法有自己的实现。策略模式使用的是组合指针的方式来实现的。程序代码结构如下,策略模式代码如下。test/CMakeLists.txtcmake_minimum_required(VERSION 2.6)if(APPLE) message(STATUS "This is Apple, do nothing.") set(CMAKE_MACOSX_RPATH 1) set(CMAKE_PREFIX_PA

2022-05-14 16:49:58 336

原创 C++ 11手写状态机

本文有电话的几种模式,通过一个trigger进行转换。在各种模式之间切换状态。手写状态机。程序代码结构如下,test/CMakeLists.txtcmake_minimum_required(VERSION 2.6)if(APPLE) message(STATUS "This is Apple, do nothing.") set(CMAKE_MACOSX_RPATH 1) set(CMAKE_PREFIX_PATH /Users/aabjfzhu/software/v

2022-05-13 11:06:44 322

原创 C++ 11经典状态模式

这个模式我本身并不喜欢。因为他是双向侵入式的。拥有状态的对象持有状态的指针。状态本身又需要持有状态的对象的指针。例如LightSwith持有State的指针。然后State的方法又依赖LightSwitch指针。甚至在发生某个状态切换的时候,出现了delete this语句。因为当前状态被废弃了。test/CMakeLists.txtcmake_minimum_required(VERSION 2.6)if(APPLE) message(STATUS "This is Apple, d

2022-05-13 09:57:22 110

原创 C++ 11 支持redo和undo的简单momento模式

本例简单的实现momento模式,并在简单momento模式上外加了一个undo和redo操作。使用std::vector实现这种操作。程序结构如下,test/CMakeLists.txtcmake_minimum_required(VERSION 2.6)if(APPLE) message(STATUS "This is Apple, do nothing.") set(CMAKE_MACOSX_RPATH 1) set(CMAKE_PREFIX_PATH /Users

2022-05-12 11:15:47 260

原创 C++ 11 使用 boost signals2库实现中介者模式

本例使用boost::signals2库实现中介者模式。其中Game是各个player持有的中介者。Coach负责连接Game和各个player的事件。程序结构如下,test/CMakeLists.txtcmake_minimum_required(VERSION 2.6)if(APPLE) message(STATUS "This is Apple, do nothing.") set(CMAKE_MACOSX_RPATH 1) set(CMAKE_PREFIX_PA

2022-05-12 09:13:41 383

原创 C++11 使用中结者模式实现ChatRoom逻辑

本例使用中结者模式实现ChatRoom逻辑。就是一个ChatRoom持有多个Person类的实例,多个Person类公用一个ChatRoom的指针。使用ChatRoom指针实现聊天操作。其中ChatRoom指针就是此处的中结者。![中结者模式结构示意图](https://img-blog.csdnimg.cn/410e11491c49448190035c34780a2bb8.png)test/CMakeLists.txtcmake_minimum_required(VERSION 2.6)if

2022-05-11 21:20:38 185

原创 C++20 使用std::coroutine递归实现后根遍历迭代器

查了一下,std::coroutine库没有实现默认的generator,我在github上面找了一个三方实现的std::generator。没咋看代码。但是能用。主要就是使用协程实现递归。后根遍历二叉树。代码结构如下,苹果的clang 12.0.5没有完整实现协程库。所以会标红。实际在fedora最新镜像中是可以编译通过的。test/CMakeLists.txtcmake_minimum_required(VERSION 2.6)if(APPLE) message(STATUS "Th

2022-05-10 15:27:25 483

原创 C++ 11 手写二叉树中序遍历迭代器 [非递归]

本例实现迭代器模式,使用C++11手写二叉树的中序遍历迭代器。程序结构如下,test/CMakeLists.txtcmake_minimum_required(VERSION 2.6)if(APPLE) message(STATUS "This is Apple, do nothing.") set(CMAKE_MACOSX_RPATH 1) set(CMAKE_PREFIX_PATH /Users/aabjfzhu/software/vcpkg/ports/cppwor

2022-05-10 14:04:51 375

原创 C++11 boost::spirit::qi简单的XML解析器示例

boost::spirit::qi是一个简单的解释器开发库。可以用来解析文本,构建解释器等。笔者花了两天时间看完了README文档,并且照着Demo代码写了一遍。感觉语法很复杂。特别是最后的一个XML解析器,很容易就写错了。好在错误信息还是很好理解的。现在把代码贴出来和大家共享一下。代码结构如下,test/CMakeLists.txtcmake_minimum_required(VERSION 2.6)if(APPLE) message(STATUS "This is Apple,

2022-05-09 21:45:05 754

原创 C++11 使用std::vector改进责任链模式

本例使用STL标准模板库中的std::vector来组织责任链。其他代码逻辑与手写责任链一致。程序目录结构如下,test/CMakeLists.txtcmake_minimum_required(VERSION 2.6)if(APPLE) message(STATUS "This is Apple, do nothing.") set(CMAKE_MACOSX_RPATH 1) set(CMAKE_PREFIX_PATH /Users/aabjfzhu/softwar

2022-05-05 15:37:35 1082

原创 C++11 使用boost::signals2库信号槽机制实现责任链

这个其实就是使用C++传统的信号槽机制实现责任链。类似事件处理机制。其中connect函数所在的线程和程序原线程在不同的线程。信号槽机制也不改变原creature对象的值。它只是在信号槽的系统中记录一个当前值而已。在本例中creature对象的值被记录在Query对象的result字段中。程序目录结构如下,程序代码如下,test/CMakeLists.txtcmake_minimum_required(VERSION 2.6)if(APPLE) message(STATUS "This

2022-05-05 15:08:53 1203

原创 C++11手写责任链模式 - 更新英雄的属性值

本例实现手写责任链,进行英雄的属性值更新。链表部分使用手写单向链表的形式实现,使用的是尾插法。程序代码结构如下,test/CMakeLists.txtcmake_minimum_required(VERSION 2.6)if(APPLE) message(STATUS "This is Apple, do nothing.") set(CMAKE_MACOSX_RPATH 1) set(CMAKE_PREFIX_PATH /Users/aabjfzhu/software/vcp

2022-05-05 15:01:54 1063

原创 C++ 11实现通信代理

本例实现了两种ping模式,一种是本地的ping,一种是remoteping。他们都实现了相同的ping接口。其中remoteping部分连接一个本地的HTTP GET服务,为了简洁起见,没有使用HTTPS(弄证书比较麻烦),使用的是HTTP。程序实现代码如下,两者的对外接口一样,但是实现完全不一样。程序目录结构如下,pingpong_service代码,tests/CMakeLists.txtcmake_minimum_required(VERSION 2.6)if(APPLE)

2022-05-05 09:35:27 668

原创 C++ 11实现类似C#的属性语法

C#语言引入了属性的概念,可以在属性set时做一些验证。本例使用C++11的std::function和lambda表达式模拟C#的属性,使用std::function存储验证函数,使用lambda表达式构造验证函数。(本例的思想是使用代理模式实现属性代理)重点关注Property2模板类即可。这是作者在原有代码上的扩展。代码结构如下,test/CMakeLists.txtcmake_minimum_required(VERSION 2.6)if(APPLE) message(STATUS

2022-05-04 10:05:08 378

原创 使用享元模式实现字符串格式化

本例实现了两种TextFormatter,用来实现字符串的格式化,就是大写部分字符,当然,第二种字符串格式化方式,通过get_range带来了更多可扩展性和灵活性。程序结构如下,程序具体代码如下,test/CMakeLists.txtcmake_minimum_required(VERSION 2.6)if(APPLE) message(STATUS "This is Apple, do nothing.") set(CMAKE_MACOSX_RPATH 1) set(CMAKE_PRE

2022-05-02 20:21:12 90

原创 C++ 11 手写享元模式

所谓享元模式其实就是相同内容的对象,只存储一份,使用不同的指针,或者ID去做索引。本例使用boost::bimap实现手写的享元模式。每次添加对象时,先查询是否存在相同的值,如果存在,则直接返回id,如果不存在,则创建新的对象,并加入bimap。检索时按id进行索引。程序结构如下,test/CMakeLists.txtcmake_minimum_required(VERSION 2.6)if(APPLE) message(STATUS "This is Apple, do noth

2022-04-30 09:08:48 98

原创 C++11 外观模式演示

本例摘选自《Design Pattern in Modern C++》一书的外观模式的demo。作者的源码中,Window类和TextBuffer类没有给实现。这里本人使用OpenCV自己实现了写字的Window类和TextBuffer类。本例的绘图系统的设计思路图如下。Text Print System Design最大宽度 和 最大高度取最大宽度 为宽度,取最大高度为高度每次绘制先往下加(最大高度 + 2),接着画Window的宽度为最大宽度Window的高度为 行数 * (最大高度 +

2022-04-29 19:29:33 2901

原创 C++ 11使用std::array保存对象属性

本例演示使用std::array保存对象属性。这样在对象的属性较多时,做聚合操作比较简单。程序结构如下test/CMakeLists.txtcmake_minimum_required(VERSION 2.6)if(APPLE) message(STATUS "This is Apple, do nothing.") set(CMAKE_MACOSX_RPATH 1) set(CMAKE_PREFIX_PATH /Users/aabjfzhu/software/vcpkg

2022-04-26 15:50:42 998

空空如也

空空如也

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

TA关注的人

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