![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
zhuge19870104
这个作者很懒,什么都没留下…
展开
-
Conan自己设定编译选项编译项目
Conan是一个C++的库管理工具。但是有的时候,我们要的有些选项在conan默认编译的时候是关闭的。这个时候就需要我们修改编译选项重新本地编译库再进行使用。例如本人曾经使用Poco库时,需要使用PageCompiler功能,默认conan编译Poco时关闭了此功能,生成的binary中没有PageCompiler,这样就无法使用此功能。修改编译选项为自己需要的选项,例如我这里是开启Poco库的PageCompiler功能。找到对应库目录下的conanfile.py,例如本例是在如下目录,原创 2022-12-25 09:49:43 · 554 阅读 · 0 评论 -
Linux C++ 乱码字符转换问题 GBK转UTF8
简单的code cvt转换,linux版本原创 2022-10-29 10:10:36 · 2336 阅读 · 0 评论 -
牛客网 - 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 · 221 阅读 · 0 评论 -
面试题-给::memcpy函数设计测试用例
用例输出的结果如下,原创 2022-07-16 09:36:46 · 182 阅读 · 0 评论 -
牛客网 BM85 合法IP
string算法,合法IP原创 2022-07-09 10:31:46 · 226 阅读 · 0 评论 -
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 · 119 阅读 · 0 评论 -
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 · 73 阅读 · 0 评论 -
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 · 140 阅读 · 0 评论 -
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 · 149 阅读 · 0 评论 -
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 · 86 阅读 · 0 评论 -
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 · 128 阅读 · 0 评论 -
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 · 78 阅读 · 0 评论 -
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 · 91 阅读 · 0 评论 -
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 · 108 阅读 · 0 评论 -
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 · 182 阅读 · 0 评论 -
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 · 81 阅读 · 0 评论 -
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 · 80 阅读 · 0 评论 -
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 · 88 阅读 · 0 评论 -
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 · 94 阅读 · 0 评论 -
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 · 270 阅读 · 0 评论 -
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 · 373 阅读 · 0 评论 -
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 · 392 阅读 · 0 评论 -
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 · 124 阅读 · 0 评论 -
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 · 297 阅读 · 0 评论 -
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 · 410 阅读 · 0 评论 -
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 · 209 阅读 · 0 评论 -
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 · 537 阅读 · 0 评论 -
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 · 411 阅读 · 0 评论 -
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 · 842 阅读 · 0 评论 -
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 · 1108 阅读 · 0 评论 -
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 · 1241 阅读 · 0 评论 -
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 · 1084 阅读 · 0 评论 -
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 · 729 阅读 · 0 评论 -
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 · 443 阅读 · 0 评论 -
使用享元模式实现字符串格式化
本例实现了两种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 · 108 阅读 · 0 评论 -
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 · 135 阅读 · 0 评论 -
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 · 2971 阅读 · 0 评论 -
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 · 1020 阅读 · 0 评论 -
C++11 使用CRTP和组合模式模拟神经网络
本例来自《Design Pattern in Modern C++》一书的源码。我做了两处修改。CRTP的SomeNeurons基类的for循环创建连接处,如果直接使用Neuron类作为for循环的参数,需要前置声明,会产生imcompleted type 警告。我改为了auto&NeuronLayer类在原先的附书代码中直接继承自std::vector< Neuron>, 这个不大合适,因为std::vector类的析构函数不是虚函数,子类如果有堆对象需要释放,可能导致子类析构原创 2022-04-26 15:16:46 · 2323 阅读 · 0 评论 -
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/po原创 2022-04-26 10:54:54 · 225 阅读 · 0 评论