- 博客(53)
- 收藏
- 关注
原创 Conan自己设定编译选项编译项目
Conan是一个C++的库管理工具。但是有的时候,我们要的有些选项在conan默认编译的时候是关闭的。这个时候就需要我们修改编译选项重新本地编译库再进行使用。例如本人曾经使用Poco库时,需要使用PageCompiler功能,默认conan编译Poco时关闭了此功能,生成的binary中没有PageCompiler,这样就无法使用此功能。修改编译选项为自己需要的选项,例如我这里是开启Poco库的PageCompiler功能。找到对应库目录下的conanfile.py,例如本例是在如下目录,
2022-12-25 09:49:43
701
原创 牛客网 - 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
250
转载 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
145
转载 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
94
转载 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
173
转载 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
181
转载 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
111
转载 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
159
转载 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
96
原创 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
494
转载 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
121
转载 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
124
原创 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
212
转载 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
102
转载 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
97
转载 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
115
转载 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
119
原创 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
321
原创 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
417
原创 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
482
原创 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
156
原创 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
344
原创 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
476
原创 C++11 使用中结者模式实现ChatRoom逻辑
本例使用中结者模式实现ChatRoom逻辑。就是一个ChatRoom持有多个Person类的实例,多个Person类公用一个ChatRoom的指针。使用ChatRoom指针实现聊天操作。其中ChatRoom指针就是此处的中结者。test/CMakeLists.txtcmake_minimum_required(VERSION 2.6)if
2022-05-11 21:20:38
233
原创 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
604
原创 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
461
原创 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
963
原创 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
1140
原创 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
1294
原创 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
1124
原创 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
794
原创 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
530
原创 使用享元模式实现字符串格式化
本例实现了两种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
126
原创 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
179
原创 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
3013
原创 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
1061
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人